Python 然后根据第三列创建另外两列
我正在尝试按列对数据帧进行分组,并根据此分组获取“已批准”或“未批准”的总值,但没有成功 例如:Python 然后根据第三列创建另外两列,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试按列对数据帧进行分组,并根据此分组获取“已批准”或“未批准”的总值,但没有成功 例如: PlaceTest | Approved 21 | 1 21 | 0 22 | 1 22 | 0 我的期望输出: PlaceTest | Approved | NotApproved 21 | 1 |
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()
最后再次使用fillnagroupby
$ 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
注意:它使用的是熊猫版本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
复制粘贴代码时,我在“未批准”列中只得到0.0
。这是真的吗?我使用的是linux python shell 3.6和pandas版本0.21.0
请看,无论如何+1是你的好解决方案。@timgeb,你是对的,我刚刚用pandas版本0.23.3
和Python3.7进行了测试,结果与你的相同,但与0.21.0
一起使用时看起来像个bug()在fillna之后,不要对其执行操作