2017-07-14 68 views
1

我希望能夠查看具有相同識別號碼的兩行,然後比較每個人的子女數量並指定較大的數字爲兩個人。我正在考慮用(.groupby)身份證號碼進行分組,但我不確定該從哪裏出發。具體而言,我不知道如何檢查哪個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

優先選擇
你想用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 

替代生產途徑複製

groupbymaxmap

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 

groupbymaxjoin

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 
相關問題