【问题标题】:Resetting index after removing rows from Pandas data frame从 Pandas 数据框中删除行后重置索引
【发布时间】:2021-07-22 03:56:41
【问题描述】:

我正在尝试将选项链拆分为单独的数据框,用于仅包含来自列的调用 ('C') 的行,对。

options_df
Index Right
0 P
1 P
2 P
3 C
4 C
5 C

我尝试创建一个新的数据框 df 来保存调用 ('C'):

df = options_df
df.drop(df[df["Right"] == 'P'].index)

这会返回数据框 df,但不幸的是它保留了原始数据框 options_df 的索引:

df
Index Right
3 C
4 C
5 C

理想情况下,df 的数据框应如下所示:

Index Right
0 C
1 C
2 C

但是,它没有。

我尝试通过重置索引来纠正,如下所示:

df.reset_index(drop=True)

但它也不起作用,并将整个原始数据框还给我,options_df:

df
Index Right
0 P
1 P
2 P
3 C
4 C
5 C

我确信有一个简单的解决方案,但我就是想不出这个。谢谢你的帮助!

【问题讨论】:

  • df.drop(df[df["Right"] == 'C'].index) 这不是就地操作。您必须重新分配它,然后重置索引。
  • 谢谢,问题解决了!
  • 其实,为了简单起见,如果只选择一个条件,则不需要使用.drop(),只需选择所需条件的行即可。

标签: python pandas indexing


【解决方案1】:

您不需要使用.drop(),只需选择您想要的条件的行,然后通过reset_index(drop=True)重置索引,如下:

df = df[df["Right"] == 'C'].reset_index(drop=True)




print(df)


  Right
0     C
1     C
2     C

【讨论】:

    【解决方案2】:

    重置索引时需要添加inplace=True

    df.reset_index(drop=True, inplace=True)
    

    或者,使用您编写的行将结果分配回 df:

    df = df.reset_index(drop=True)
    

    【讨论】:

    • 谢谢 - 这也有帮助!总之,我需要重新分配:df = df.drop(df[df["Right"] == 'P'].index)d f= df.reset_index(drop=True)
    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2019-09-15
    • 2021-03-22
    • 2013-05-12
    相关资源
    最近更新 更多