2016-08-01 3 views
-1

データフレーム内の国の出現数を数えたいと思っています。以下はサンプルであり、上位2カ国の出現順も見ています。Python:データフレーム内の出現数とトップ(n)値をチェックする方法は?

  Date   Location 
0 09/17/1908   Virginia 
1 07/12/1912   New Jersey 
2 08/06/1913    Canada 
3 09/09/1913    England 
4 10/17/1913    Germany 
5 03/05/1915    Belgium 
6 09/03/1915    Germany 
7 07/28/1916   Bulgeria 
8 09/24/1916    England 
9 10/01/1916    England 

結果の値は、以下のようなものでなければなりません:

Location Count 
England  3 
Germany  2 
+0

はあなたがこれまでに試したものを置くことができるよりも速いのですか? –

+0

私はdf.pivot_table()とdf.groupby()を試しましたが、残念ながらいずれかの関数から期待される結果を得ることができませんでした。私はPythonの初心者です – Soumyaansh

+0

@Soumyaanshは私の答えがあなたのために働いたのですか?そうでない場合は、どのような結果が得られたか教えてください。 –

答えて

1
countCollection = df['collection'].value_counts() 

.value_counts()あなたDATAFRAMEにcollectionという名前のコレクションからのアイテムのカウントを与えます。また

、あなたが最終的な値を取得するために、Pythonのに慣れてい述べたように:

countCollection["a"] 

がキー「A」を含む行のために、カウントの返却コレクションからカウント値を取得します。

0

あなたはsizeと一緒groupbyを使用することがあります。

counts = df.groupby('Location').size() 

countsはタイプpandas.Seriesです。 N=1e4

In [1]: %timeit df.char.value_counts() 
1000 loops, best of 3: 1.34 ms per loop 

In [2]: %timeit df.groupby('char').size() 
1000 loops, best of 3: 1.01 ms per loop 

N=1e6

するためのコマンド timeit魔法ipythonを使用して

import pandas as pd 
import numpy as np 

# number of items in list 
N = 1e4 

# create a list uniformely samples characters 
l = np.random.choice(list('abcd'), N) 

# create a DataFrame 
df = pd.DataFrame(l, columns=['char']) 

:あなたはNickの答えに

counts.sort_values(inplace=True) 

比較ですで、それを命ずることができます小さいデータフレームのために3210

In [1]: %timeit df.char.value_counts() 
10 loops, best of 3: 64.2 ms per loop 

In [2]: %timeit df.groupby('char').size() 
10 loops, best of 3: 73.2 ms per loop 

groupby & sizevalue_countsよりも高速ですが、大きなDateFramesためvalue_countsgroupby & size

関連する問題