【问题标题】:Fill NaN with mean value with group by用 group by 的平均值填充 NaN
【发布时间】:2019-10-01 13:55:31
【问题描述】:

我的数据集是这样的

Month DayOfWeek  Class A1  A2 ... A999
July  Monday     Bata  7   9  ... 5
July  Tuesay     Bata  3   1  ... 2
July  Sunday     Bata  4   5  ... 6
July  Monday     Adid  9   8  ... 5
July  Sunday     Adid  4   0  ... 4
Sept  Monday     Nike  7   5  ... 7
Sept  Sunday     Nike  8   3  ... 7
Sept  Satday     Adid  2   7  ... 7
Sept  Monday     Bata  8   9  ... 4
Oct   Monday     Nike  4   2  ... 5
Oct   Sunday     Bata  8   6  ... 3
July  Monday     Nike  NaN NaN    NaN
Sept  Sunday     Nike  NaN NaN    NaN
Oct   Satday     Nike  NaN NaN    NaN
Sept  Monday     Bata  NaN NaN    NaN

我想用以前记录的平均值填充 NaNs

我知道我可以使用

df['A1'] = df['A1'].fillna((df['A1'].mean()))

但这是一个不好的方法,因为我有超过 1000 列,以后可能会增加

添加到那个

我想根据 Month 和 DayOfWeek 找到平均值

为了这个记录

July  Monday     Nike  NaN NaN    NaN

因此,平均值将仅是具有 Month = July & DayOfWeek = Monday

的记录的平均值

我该怎么做?

【问题讨论】:

标签: python dataframe nan


【解决方案1】:

给你:

df['A1'] = df.groupby(['Month','DayOfWeek'])['A1'].transform(lambda x: x.fillna(x.mean()))

上面仍然会给出一个空值,因为“Month = Oct & DayOfWeek = Monday”没有值。 在这种情况下,您可能需要编写第二个代码来填充该月的平均值或 DayOfWeek 的平均值。 下面的代码 sn-p 用空值记录月份的平均值填充空值:

df['A1'] = df.groupby('Month')['A1'].transform(lambda x: x.fillna(x.mean()))

如果有帮助请点赞

【讨论】:

  • 谢谢,但我在应用此行后松开了 Month 和 DayOfWeek 列,它们不再在数据框中了吗?!!有什么解决办法吗?
  • 当我运行这些代码行时,所有列仍然完好无损。你想分享你写的东西。运行 df= df.groupby('Month')....... 而不是 df['A1'] = df.groupby('Month')...... 会让你失去其他列。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多