[英]Iterate over rows in pandas df
我有如下所示的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()。
如果總是有至少一個1
可能通過Series.eq
獲取第一個1
的索引,最后通過Series.idxmax
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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.