我想在2列中填写缺失值。有Date和Cat2应该根据预定义的Cat1(在先前填充的行中预定义)的最后日期填充另一行的值,例如:
数据示例:
Day Date Cat1 Cat2
1 31/12/17 cat mouse
2 01/09/18 cat mouse
3 27/05/18 dog elephant
4 NaN cat NaN
5 NaN cat NaN
因此,应基于NaN
列-Date
中cat
值的最后存在日期来填充Cat1
列的01/09/18
。 NaN
列中的Cat2
应该由mouse
填充为已为Date
-01/09/18
选择的行中的定义值。
我读到,遍历每一行将是非常糟糕的做法,并且最好以一种方式完成所有操作。
任何想法我都会感激。谢谢
我尝试通过fillna
方法执行此操作,但是它填充的是没有Cat1条件的最后一个值。
data.fillna(method='ffill', inplace = True)
实际结果是:
Day Date Cat1 Cat2
1 31/12/17 cat mouse
2 01/09/18 cat mouse
3 27/05/18 dog elephant
4 27/05/18 cat elephant
5 27/05/18 cat elephant
预期结果应该是:
Day Date Cat1 Cat2
1 31/12/17 cat mouse
2 01/09/18 cat mouse
3 27/05/18 dog elephant
4 01/09/18 cat mouse
5 01/09/18 cat mouse
答案 0 :(得分:1)
我相信您需要GroupBy.ffill
和DataFrame.reindex
来获得与原始DataFrame
相同的订单:
df = df.groupby('Cat1').ffill().reindex(df.columns, axis=1)
print (df)
Day Date Cat1 Cat2
0 1 31/12/17 cat mouse
1 2 01/09/18 cat mouse
2 3 27/05/18 dog elephant
3 4 01/09/18 cat mouse
4 5 01/09/18 cat mouse
答案 1 :(得分:0)
另外,另一种方法是:
data = data.groupby(['Cat1'], as_index = False).apply(lambda group: group.ffill())
谢谢@Jezrael提供解决方案:)
答案 2 :(得分:0)
您可以使用字典:
dict = df[['cat','cat2']].drop_duplicates(keep='first', inplace=False).to_dict()
df['cat2'] = df['cat1'].replace(dict)
对于时间序列列,可以使用timedelta(线性外推)。祝你好运!