【问题标题】:Iterate over rows in pandas df遍历 pandas df 中的行
【发布时间】:2021-07-05 06:43:53
【问题描述】:

我有如下所示的df:

           CX     CY   CS
97539   0.39896 0.7787  0
97540   0.39896 0.7787  0
97541   0.39896 0.7787  0
97542   0.39896 0.7787  0
97543   0.39896 0.7787  0
97544   0.39896 0.7787  0
97545   0.39896 0.7787  0
97546   0.39896 0.7787  0
97547   0.39896 0.7787  0
97548   0.39896 0.7787  0
97549   0.39896 0.7787  0
97550   0.39896 0.7787  0
97551   0.39896 0.7787  0
97552   0.39896 0.7787  0
97553   0.39896 0.7787  0
97554   0.39896 0.7787  0
97555   0.39896 0.7787  0
97556   0.39896 0.7787  0
97557   0.39896 0.7787  0
97558   0.39896 0.7787  0
97559   0.39896 0.7787  0
97560   0.39896 0.7787  0
97561   0.39896 0.7787  1
97562   0.39896 0.7787  0
97563   0.39896 0.7787  0
97564   0.39896 0.7787  0
97565   0.39896 0.7787  0

我只想保留 df 的一部分,直到“CS”列上的值变为 1 并删除剩余的行。所以我想要这样的东西:

           CX     CY   CS
97539   0.39896 0.7787  0
97540   0.39896 0.7787  0
97541   0.39896 0.7787  0
97542   0.39896 0.7787  0
97543   0.39896 0.7787  0
97544   0.39896 0.7787  0
97545   0.39896 0.7787  0
97546   0.39896 0.7787  0
97547   0.39896 0.7787  0
97548   0.39896 0.7787  0
97549   0.39896 0.7787  0
97550   0.39896 0.7787  0
97551   0.39896 0.7787  0
97552   0.39896 0.7787  0
97553   0.39896 0.7787  0
97554   0.39896 0.7787  0
97555   0.39896 0.7787  0
97556   0.39896 0.7787  0
97557   0.39896 0.7787  0
97558   0.39896 0.7787  0
97559   0.39896 0.7787  0
97560   0.39896 0.7787  0
97561   0.39896 0.7787  1

任何想法如何处理它?请注意,1 的值可以在任何行,所以我不能只使用 .iloc()。理想情况下,我想避免使用 itterows()。

【问题讨论】:

  • 这是完美的样本数据,谢谢。添加了答案。

标签: pandas dataframe loops rows


【解决方案1】:

如果总是至少有一个1,则可以通过Series.eq比较值,然后通过Series.idxmax获取第一个1的索引,最后通过DataFrame.loc过滤:

df1 = df.loc[: df['CS'].eq(1).idxmax()]

如果也没有 1 值,则解决方案有效 - 然后返回空 DataFrame:

m = df['CS'].eq(1)
df1 = df.loc[: m.idxmax()] if m.any() else pd.DataFrame()

或在boolean indexing 中使用Series.cummax 的技巧,只需更改订单2 次:

df1 = df[df['CS'].iloc[::-1].eq(1).cummax().iloc[::-1]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2014-10-28
    • 2018-08-01
    • 2021-09-07
    • 2018-12-09
    • 2017-01-15
    • 2015-08-09
    相关资源
    最近更新 更多