【发布时间】:2020-01-16 12:14:55
【问题描述】:
我正在处理如下数据。数据框按日期排序:
category value Date
0 1 24/5/2019
1 NaN 24/5/2019
1 1 26/5/2019
2 2 1/6/2019
1 2 23/7/2019
2 NaN 18/8/2019
2 3 20/8/2019
7 3 1/9/2019
1 NaN 12/9/2019
2 NaN 13/9/2019
我想用该特定类别的先前平均值替换“NaN”值。
在 pandas 中最好的方法是什么?
我考虑过的一些方法:
1) 这个小片段:
df['mean' = df.groupby('category')['time'].apply(lambda x: x.shift().expanding().mean()))
这让我在另一列中得到了正确的方法,它不会取代 NaN。
2) 此 riff 将 NaN 替换为列的平均值:
df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))
这两个都不能完全满足我的要求。如果有人可以指导我,将不胜感激!
【问题讨论】:
-
“该特定类别的先前均值”到底是什么意思?因为类别的重复。
-
我的意思是,对于每个 NaN 值,查看相应的类别,找到该类别在所有先前日期中的平均值,然后用这个计算出的平均值替换 NaN。
-
df['value']=df['value'].fillna(df.groupby('category')['value'].transform(lambda x: x.shift().expanding().mean()))?