如何比较一列的两行,然后更改pandas中的另一列

时间:2017-07-14 20:12:57

标签: python pandas

我希望能够查看具有相同标识号的两行,然后比较每个人的子女数量,并为两个人分配更大的数字。我想通过(.groupby)ID号分组,但我不知道从那里去哪里。具体来说,我不知道如何检查哪个numchild更大,同时用更大的数字替换较小的数字。例如:

 Index   ID             NumChil  
 0       2011000070          3   
 1       2011000070          0   
 2       2011000074          0 
 3       2011000074          1   

应该转到:

 Index   ID             NumChil  
 0       2011000070          3   
 1       2011000070          3   
 2       2011000074          1 
 3       2011000074          1  

1 个答案:

答案 0 :(得分:1)

首选项
您希望将groupbytransformmax

一起使用
df.groupby('ID').NumChil.transform('max')

0    3
1    3
2    1
3    1
Name: NumChil, dtype: int64

您可以使用

分配回原位
df['NumChil'] = df.groupby('ID').NumChil.transform('max')
df

   Index          ID  NumChil
0      0  2011000070        3
1      1  2011000070        3
2      2  2011000074        1
3      3  2011000074        1

或使用

制作副本
df.assign(NumChil=df.groupby('ID').NumChil.transform('max'))

   Index          ID  NumChil
0      0  2011000070        3
1      1  2011000070        3
2      2  2011000074        1
3      3  2011000074        1

替代方法

groupby maxmap

df.ID.map(df.groupby('ID').NumChil.max())

0    3
1    3
2    1
3    1
Name: ID, dtype: int64
df.assign(NumChil=df.ID.map(df.groupby('ID').NumChil.max()))

   Index          ID  NumChil
0      0  2011000070        3
1      1  2011000070        3
2      2  2011000074        1
3      3  2011000074        1

groupby maxjoin

df.drop('NumChil', 1).join(df.groupby('ID').NumChil.max(), on='ID')

   Index          ID  NumChil
0      0  2011000070        3
1      1  2011000070        3
2      2  2011000074        1
3      3  2011000074        1