问题描述
我有当前的数据框:
日期 | 来源 | 类型 | 访问 | 销售 |
---|---|---|---|---|
01/01/2020 | 来源 1 | 类型 1 | 100 | 10 |
01/01/2020 | 来源 2 | 类型 1 | 150 | 5 |
02/01/2020 | 来源 1 | 类型 1 | NaN | NaN |
02/01/2020 | 来源 2 | 类型 1 | 125 | 15 |
03/01/2020 | 来源 1 | Type2 | 150 | 18 |
03/01/2020 | 来源 2 | Type2 | NaN | NaN |
04/01/2020 | 来源 1 | Type2 | 150 | 25 |
04/01/2020 | 来源 2 | Type2 | 120 | 05 |
我想做的是一个简单的 .interpolate() 缺失数据,但是我需要按来源和类型对它进行分组以保持数据尽可能准确,而不是基于上面和下面的行哪些不相关。
我已经到了这个阶段:
df_fixed = df[['Source','Type','Visits','Sales']].loc[(df['Source'] == 'Source1') & (df['Type'] == 'Type1')].interpolate()
这是第一步,但不能更进一步,感觉有更简单的方法。
完成此任务最优雅的方式是什么?
解决方法
一个想法是改变 NAN - 中位数或平均值。
df['visits'].fillna(df['visits'].median(),inplace=True)
df.fillna(df.mean())
编辑:
如果您决定使用 .interpolate() - 那么
需要按来源和类型对其进行分组:
您可以使用 groupBy() - 按来源和类型分组的方法:
df.groupby(['Source','Type'])