基于groupbysum的Python Pandas if语句

2024-09-23 10:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

使用此python pandas数据帧df:

CategoryA | CategoryB | Count
1           A           0
1           A           -1
2           B           1
2           B           1
3           C           1
3           C           -1

我基本上想标记为删除,所有类别的和小于0的分组。在

^{pr2}$

但我得到一个错误值错误:值的长度与索引的长度不匹配

输出将是:

CategoryA | CategoryB | Count | decision
1           A           0       delete
1           A           -1      delete
2           B           1       keep
2           B           1       keep
3           C           1       delete
3           C           -1      delete

我更愿意用航向位置但不知道怎么做。在


Tags: 数据标记pandasdfcount错误delete类别
3条回答
df['decision']=df['CategoryB'].map(df.groupby('CategoryB')['Count'].\
      apply(lambda x :np.where(x.sum()>0,'keep','delete')))
df
Out[573]: 
   CategoryA CategoryB  Count decision
0          1         A      0   delete
1          1         A     -1   delete
2          2         B      1     keep
3          2         B      1     keep
4          3         C      1   delete
5          3         C     -1   delete

你在正确的轨道上。在

m = df.groupby(['CategoryA', 'CategoryB']).transform('sum').gt(0)
df['decision'] = np.where(m, 'keep', 'delete')

df
   CategoryA CategoryB  Count decision
0          1         A      0   delete
1          1         A     -1   delete
2          2         B      1     keep
3          2         B      1     keep
4          3         C      1   delete
5          3         C     -1   delete

使用transform检索相同大小的结果。在

In [67]: df['decision'] = \
             np.where(df.groupby(['CategoryA', 'CategoryB'])['Count'].transform('sum') > 0, 
                      'keep', 'delete')

In [68]: df
Out[68]:
   CategoryA CategoryB  Count decision
0          1         A      0   delete
1          1         A     -1   delete
2          2         B      1     keep
3          2         B      1     keep
4          3         C      1   delete
5          3         C     -1   delete

相关问题 更多 >