假设我有一个数据框ABC,看起来像:
a b c d e
2016-06-01 3 6 NAN 4 8
2016-06-01 3 NAN 5 NAN NAN
2016-06-01 NAN NAN NAN 4 8
2017-03-01 1 7 8 NAN NAN
2017-03-01 NAN NAN 8 9 3
2017-06-01 NAN 3 NAN NAN 6
2017-06-01 8 3 4 7 NAN
索引是日期时间,我希望它看起来像:
a b c d e
2016-06-01 3 6 5 4 8
2017-03-01 1 7 8 9 3
2017-06-01 8 3 4 7 6
我试图这样编码:
for i in ABC.index.strftime('%Y-%m-%d'):
for j in ABC:
if ABC[i][j].isna().any() and ABC[i][j].notna().any()
ABC[i][j].fillna(ABC[i][j][ABC[i][j].notna()][0],inplace = True)
print(ABC)
我认为我可以像这样制作一个数据框:
a b c d e
2016-06-01 3 6 5 4 8
2016-06-01 3 6 5 4 8
2016-06-01 3 6 5 4 8
2017-03-01 1 7 8 9 3
2017-03-01 1 7 8 9 3
2017-06-01 8 3 4 7 6
2017-06-01 8 3 4 7 6
然后我可以使用drop_duplicates实现我的目标,但是失败了。 (inplace = True)似乎不起作用,并且我打印出的内容与原始数据帧相同。 我不知道出了什么问题,也不知道如何解决。 有人可以告诉我如何解决它,或者是实现目标的更好方法吗? 非常感谢。
答案 0 :(得分:2)
如果数据帧为floats
,只需对索引进行分组并使用first
,它将获取第一个非NA值
df.groupby(level=0).first()
a b c d e
2016-06-01 3.0 6.0 5.0 4.0 8.0
2017-03-01 1.0 7.0 8.0 9.0 3.0
2017-06-01 8.0 3.0 4.0 7.0 6.0
请注意,NAN
不被视为NaN
,因此可能是您在其中使用object
dtype的列。
要修复,只需pd.to_numeric
或df.astype(float)
-可以解决很多SO线程。