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