Python 如何集成重复索引?

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

假设我有一个数据帧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
索引是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()
。您可以稍后将日期列设置回索引。如果您的数据有时不同,则需要自定义聚合器。见: