如何计算与每个组相关的Python和panda中任意值对应的元素数量?
我的意思是R和plyr中的以下代码:
ddply(df, .(group), summarise, x=sum(ifelse(y==1, 1, 0)))
那么,我有什么要写出以下缺失的部分?
df.groupby(["groupA", "groupB"]).apply(lambda x: ....?)
感谢。
答案 0 :(得分:1)
如果你想要所有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
答案 1 :(得分:0)
我不知道R和plyr。希望以下内容可以帮助您通过对DataFrame
列进行分组来计算。
df2 = pd.DataFrame({'count' : df.groupby(["groupA","groupB"]).size()}).reset_index()
进一步你可以对它们进行排序。
df2.sort_index(by=['count'], ascending=False)