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

Python 如何比较一列的两行,然后更改另一列,python,pandas,Python,Pandas,我希望能够查看具有相同标识号的两行,然后比较每个人的儿童数量,并为两个人分配较大的数字。我正在考虑按(.groupby)ID号分组,但我不确定该从何处着手。具体地说,我不知道如何检查哪个numchild更大,同时用较大的数字替换较小的数字。例如: Index ID NumChil 0 2011000070 3 1 2011000070 0 2 2011000074

我希望能够查看具有相同标识号的两行,然后比较每个人的儿童数量,并为两个人分配较大的数字。我正在考虑按(.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  

首选选项
您希望将
groupby
transform
max

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

替代方法

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

0    3
1    3
2    1
3    1
Name: ID, dtype: int64
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
groupby
带有
max
map

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

0    3
1    3
2    1
3    1
Name: ID, dtype: int64
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

groupby
max
join

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

0    3
1    3
2    1
3    1
Name: ID, dtype: int64
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