具有以下数据框:
token name ltp change
0 12345.0 abc 2.0 NaN
1 12345.0 abc 5.0 1.500000
2 12345.0 abc 3.0 -0.400000
3 12345.0 abc 9.0 2.000000
4 12345.0 abc 5.0 -0.444444
5 12345.0 abc 16.0 2.200000
6 6789.0 xyz 1.0 NaN
7 6789.0 xyz 5.0 4.000000
8 6789.0 xyz 3.0 -0.400000
9 6789.0 xyz 13.0 3.333333
10 6789.0 xyz 9.0 -0.307692
11 6789.0 xyz 20.0 1.222222
我需要为名称列的每个类别计算正数和负数。在上面的例子中
abc:pos_count: 3 abc:neg_count:2
xyz:pos_count:2 xyz:neg_count:2
count=df.groupby('name')['change'].count()
count
但是,这只给出了按组划分的总计数,而不是单独的正数和负数。
最佳答案
使用:
g = df.groupby('name')['change']
counts = g.agg(
pos_count=lambda s: s.gt(0).sum(),
neg_count=lambda s: s.lt(0).sum(),
net_count=lambda s: s.gt(0).sum()- s.lt(0).sum()).astype(int)
结果:
# print(counts)
pos_count neg_count net_count
name
abc 3 2 1
xyz 3 2 1
关于python - 在 Pandas 中应用groupby后如何计算列的正数和负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62014890/