簡體   English   中英

Pandas groupby:填充其他組成員的缺失值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM