Pandas groupby计数值大于每个组中的给定值

时间:2018-03-19 21:51:22

标签: python pandas

我想计算每组中有多少个值大于一组给定的值 例如,DataFrame df就像:

print(df)

  item   A   B   C
0    a  -4  17 -15
1    a  19 -16  -3
2    a -18 -11 -13
3    b  -2   9   7
4    b  -9 -15 -14
5    b -20   2 -10
6    c -19   0 -10
7    c  11   3   4
8    d   5   0 -17
9    d   7   1  -1

条件c是另一个DataFrame,如

print(c)

  item  value
0    a      5
1    b     -1
2    c      2
3    d      1

所需的结果如

        count
item   A   B   C
a      1   1   0
b      0   2   1
c      1   1   1
d      2   0   0

我搜索了有关在条件中使用pandas.groupby()函数的问题,但答案基于"大于一个值"而不是一组值。

伪代码可能写成如下...
我知道它不能正常工作......

df.groupby("item")[["A", "B", "C"]].apply(lambda x: x > c["value"] if df["item"] == c["item"]).size()

如果你们中的任何人能帮助我,我们将不胜感激 非常感谢。

1 个答案:

答案 0 :(得分:1)

IIUC

(df.set_index('item')).sub(c.set_index('item').reindex(df.item).value,axis=0).gt(0).groupby(level=0).sum()
Out[646]: 
        A    B    C
item               
a     1.0  1.0  0.0
b     0.0  2.0  1.0
c     1.0  1.0  1.0
d     2.0  0.0  0.0