[英]Pandas groupby: fill missing values from other group members
我認為最好用一個例子來說明。 我想做的是從一個組中找到非空數,並將其傳播到該組的其余部分。
In [52]: df = pd.DataFrame.from_dict({1:{'i_id': 2, 'i_num':1}, 2: {'i_id': 2, 'i_num': np.nan}, 3: {'i_id': 2, 'i_num': np.nan}, 4: {'i_id': 3, 'i_num': np.nan}, 5: {'i_id': 3, 'i_num': 5}}, orient='index')
In [53]: df
Out[53]:
i_num i_id
1 1 2
2 NaN 2
3 NaN 2
4 NaN 3
5 5 3
DataFrame看起來像這樣。 我想要的是讓所有i_id == 2並使它們的i_num == 1,並使所有i_id == 3,並使它們的i_num == 5(因此都與它們的非空組鄰居匹配)。
因此最終結果將是這樣:
i_num i_id
1 1 2
2 1 2
3 1 2
4 5 3
5 5 3
first
查找組中的第一個非空值。 您可以像這樣在每個組中填寫其他值:
df['i_num'] = df.groupby('i_id')['i_num'].transform('first')
這將根據需要生成列:
i_num i_id
1 1 2
2 1 2
3 1 2
4 5 3
5 5 3
請記住,這會將組中的所有值替換為第一個值,而不僅僅是NaN
值(盡管這似乎是您在此處查找的內容)。
另外,為了尊重組中的其他任何非空值,您可以通過以下方式使用fillna
:
# make a column of first values for each group
x = df['i_id'].map(df.groupby('i_id')['i_num'].first())
# fill only NaN values using new column x
df['i_num'] = df['i_num'].fillna(x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.