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()
最后再次使用
fillna
groupby

$ 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之后,不要对其执行操作