有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())