我希望能够查看具有相同标识号的两行,然后比较每个人的子女数量,并为两个人分配更大的数字。我想通过(.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
答案 0 :(得分: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
替代方法
groupby
max
和map
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
max
和join
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