Python Pandas Groupby NaN在该列中应具有相同的值

时间:2019-12-08 08:06:00

标签: python pandas numpy dataframe pandas-groupby

以下是一个数据框:

  A    B     C
ABC   [0,3] NaN
ABC   NaN   No
XYZ   NaN  Yes
ABC   [2]   [str,'str']
XYZ   [4,6] NaN
PQR   NaN   NaN
PQR   []    NaN
123   1     ["str2"]
PQR   NaN   NaN

现在我想用同一组中的值替换NaN值,即B2中的ABC'NaN'显示用[0,3]或[2]替换。然后C5中的XYZ“ NaN”值应为“是”,而其他XYZ C3为“是”。 因此,不应存在任何NaN值,而将所有NaN替换为由groupby([CoulmnA])所在的同一groupby()成员存在于同一列中的值。

2 个答案:

答案 0 :(得分:0)

此行可能有效:

df.groupby('A')['B'].apply(lambda g: g.ffill().bfill())

更新说明:它将B列按A值分组,然后用在该组中找到的非null值向前和向后填充。如果您不在意要使用的值 (如果有> 1个选项),这将起作用。

答案 1 :(得分:0)

A分组,然后填写其他列

df[['C', 'B']] = ndf.sort_values('A').groupby('A').agg({'B': 'ffill', 'C': 'ffill'}).bfill()

     A      B            C
0  ABC  [0,3]           No
1  ABC  [0,3]           No
2  XYZ  [4,6]          Yes
3  ABC    [2]  [str,'str']
4  XYZ  [4,6]          Yes
5  PQR     []          Yes
6  PQR     []          Yes
7  123      1     ["str2"]
8  PQR     []          Yes

您必须ffillbfill才能替换下一个/上一个索引中的NaN,请参阅fillna