Python 如何集成重复索引?
假设我有一个数据帧ABC,它看起来像:Python 如何集成重复索引?,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个数据帧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-0
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
索引是datetime,我希望它看起来像:
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
我想我可以制作这样的数据帧:
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_副本来实现我的目标,但我失败了。
(inplace=True)似乎不起作用,并且我打印出来的内容与原始数据帧完全相同。
我不知道出了什么问题,也不知道如何解决。
有人能告诉我如何解决这个问题,或者有更好的方法来实现我的目标吗?
非常感谢 如果数据帧为
浮动
,只需按索引分组并使用first
,它将获取第一个非NA值
df.groupby(level=0).first()
请注意,
NAN
不被视为NAN
,因此可能是您在其中键入了对象的列
若要修复,只需将pd.To_numeric
或df.astype(float)-这上面有很多线程。如果您的数据帧是floats
,只需按索引分组并使用first
,它会获取第一个非NA值
df.groupby(level=0).first()
请注意,
NAN
不被视为NAN
,因此可能是您在其中键入了对象的列
要修复此问题,只需将pd.改为_numeric
或df.astype(float)-这方面的线程太多了。请发布一个示例数据帧。您的数据帧看起来真的像第一个示例吗?嗨,欢迎来到StackOverflow。这里有一行代码可以让您开始使用:df.groupby(“date”).fillna(method=“ffill”).dropna(how=“any”).drop_duplicates()
注意,这并不能保证适用于所有条件,但它确实适用于示例df。假设date列是一个索引,您可以重置df
的索引,使日期成为一列。然后,您可以对日期执行groupby
,并执行ffill()
。您可以稍后将日期列设置回索引。如果您的数据有时不同,则需要自定义聚合器。请参阅:请发布一个示例数据帧。您的数据帧看起来真的像第一个示例吗?嗨,欢迎来到StackOverflow。这里有一行代码可以让您开始使用:df.groupby(“date”).fillna(method=“ffill”).dropna(how=“any”).drop_duplicates()
注意,这并不能保证适用于所有条件,但它确实适用于示例df。假设date列是一个索引,您可以重置df
的索引,使日期成为一列。然后,您可以对日期执行groupby
,并执行ffill()
。您可以稍后将日期列设置回索引。如果您的数据有时不同,则需要自定义聚合器。见: