我试图按列对数据帧进行分组,并根据此分组获得"已批准"或"未批准"的总值,但没有成功。
示例:
PlaceTest | Approved
21 | 1
21 | 0
22 | 1
22 | 0
我想要的输出:
PlaceTest | Approved | NotApproved
21 | 1 | 1
22 | 1 | 1
谢谢!
给定
>>> df
PlaceTest Approved
0 21 1
1 21 0
2 22 1
3 22 0
你可以发布
>>> df.assign(NotApproved=1 - df['Approved']).groupby('PlaceTest').sum().reset_index()
PlaceTest Approved NotApproved
0 21 1 1
1 22 1 1
您可以实现这种略有不同的方式,不过这是两行处理。
$ df
Approved PlaceTest
0 1 21
1 0 21
2 1 22
3 0 22
第一个具有新列的groupby
和sum
:
$ df['Not Approved'] = df.groupby('PlaceTest')['Approved'].sum()
最后再次使用groupby
和fillna
$ df = df.groupby('PlaceTest')['Approved', 'Not Approved'].sum().fillna("1").reset_index()
$ df
PlaceTest Approved Not Approved
0 21 1 1
1 22 1 1
注意:它适用于panda版本0.21.0
。
对于大于0.21.0
的版本,上述用例应使用以下内容:
>>> df.groupby('PlaceTest')['Approved', 'Not Approved'].max().fillna("1").reset_index()
PlaceTest Approved Not Approved
0 21 1 1
1 22 1 1