gpt4 book ai didi

python-3.x - Pandas 数据透视表条件计数

转载 作者:行者123 更新时间:2023-12-05 00:13:03 24 4
gpt4 key购买 nike

我有一个简单的数据框:

df = pd.DataFrame({'id': ['a','a','a','b','b'],'value':[0,15,20,30,0]})
df
id value
0 a 0
1 a 15
2 a 20
3 b 30
4 b 0

我想要一个值数大于零的数据透视表。

我试过这个:
raw = pd.pivot_table(df, index='id',values='value',aggfunc=lambda x:len(x>0))

但是返回了这个:
    value
id
a 3
b 2

我需要的:
    value
id
a 2
b 1

我用 groupby 和 filter 阅读了很多解决方案。是否可以仅使用 pivot_table 命令来实现?如果不是,哪种方法最好?

提前致谢

更新

只是为了更清楚地说明为什么我要避免使用过滤器解决方案。在我真实而复杂的 df 中,我还有其他列,如下所示:
df = pd.DataFrame({'id': ['a','a','a','b','b'],'value':[0,15,20,30,0],'other':[2,3,4,5,6]})
df
id other value
0 a 2 0
1 a 3 15
2 a 4 20
3 b 5 30
4 b 6 0

我需要对“其他”列求和,但是当我过滤时,我得到了这个:
df=df[df['value']>0]
raw = pd.pivot_table(df, index='id',values=['value','other'],aggfunc={'value':len,'other':sum})
other value
id
a 7 2
b 5 1

代替:
    other  value
id
a 9 2
b 11 1

最佳答案

需要sum为计数 True s 由条件创建 x>0 :

raw = pd.pivot_table(df, index='id',values='value',aggfunc=lambda x:(x>0).sum())
print (raw)
value
id
a 2
b 1

正如@Wen 提到的,另一个解决方案是:
df = df[df['value'] > 0]
raw = pd.pivot_table(df, index='id',values='value',aggfunc=len)

关于python-3.x - Pandas 数据透视表条件计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com