Pandas -获取某些行的小计



有DataFrame作为:

host  status count
0   ast2  0      1
1   ast2  1      2
2   ast2  2      3
3   ast3  0      4
4   ast3  1      5
5   ast3  2      6
6   ast9  0      7
7   ast9  2      8

如何获得行,其中状态只有0或1不是2的子总数?所以结果应该是:

host  status count
0   ast2  0      3
1   ast2  2      3
2   ast3  0      9
3   ast3  2      6
4   ast9  0      7
5   ast9  2      8

可以将status列的1替换为0,然后聚合sum:

df1 = (df.assign(status = df['status'].mask(df['status'].eq(1), 0))
.groupby(['host','status'], as_index=False)['count']
.sum())
print (df1)
host  status  count
0  ast2       0      3
1  ast2       2      3
2  ast3       0      9
3  ast3       2      6
4  ast9       0      7
5  ast9       2      8

替代解决方案:

df1 = (df.replace({'status':{1:0}})
.groupby(['host','status'], as_index=False)['count']
.sum())

最新更新