如何整合重复索引?

时间:2019-10-10 18:08:05

标签: 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-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)似乎不起作用,并且我打印出的内容与原始数据帧相同。 我不知道出了什么问题,也不知道如何解决。 有人可以告诉我如何解决它,或者是实现目标的更好方法吗? 非常感谢。

1 个答案:

答案 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_numericdf.astype(float)-可以解决很多SO线程。