Python と pandas で任意の 1 つの値に対応する要素の数をグループごとにカウントするにはどうすればよいですか?
Rとplyrの次のコードを意味します:
ddply(df, .(group), summarise, x=sum(ifelse(y==1, 1, 0)))
では、次の欠落部分は何を書けばいいのでしょうか?
df.groupby(["groupA", "groupB"]).apply(lambda x: ....?)
ありがとう。
すべての 1 の単純な合計が必要な場合は、次のようになります。
df.groupby(["groupA", "groupB"]).sum()
条件を使用する場合:
df.groupby('A').apply(lambda x: x[x['B'] > 0]['B'].sum())
また
df.groupby('A').agg(lambda x: np.sum(x[x > 0]))
例:
>>> df = pd.DataFrame({'A':list('aaabbbbccc'), 'B':[1,1,0,1,1,0,0,1,0,0]})
>>> df.groupby('A').sum()
B
A
a 2
b 2
c 1
>>> df.groupby('A').apply(lambda x: x[x['B'] > 0]['B'].sum())
A
a 2
b 2
c 1
>>> df.groupby('A').agg(lambda x: np.sum(x[x > 0]))
B
A
a 2
b 2
c 1
Rとplyrについてはわかりません。以下は、列をグループ化してカウントするのに役立つことを願っていDataFrame
ます。
df2 = pd.DataFrame({'count' : df.groupby(["groupA","groupB"]).size()}).reset_index()
さらに、それらを並べ替えることができます。
df2.sort_index(by=['count'], ascending=False)