簡體   English   中英

在滿足列條件后,Pandas會截斷DataFrame

[英]Pandas truncate DataFrame after a column condition is met

所以我有以下DataFrame df:

在此輸入圖像描述

該框架包含兩組在該組中排序的數據。

第1組來自359至365的索引

第2組來自指數366至371(含)

我想將它們分成兩組。 可能有兩個以上的小組。 我正在應用的邏輯是每當下一個STEPS_ID小於當前STEPS_ID時,這標志着該組的結束。

我很容易通過df.STEPS_ID <= df.STEPS_ID.shift(-1)得到這個指針

是否有一種優雅的熊貓方式可以輕松實現這一點,可能使用矢量化操作而不是循環?

這似乎是一個常見的問題,我相信必須有一個明確定義的算法來解決這些問題。 如果你們能指導我閱讀這些算法的理論基礎,我也將不勝感激。

“將事物分成小組”的方法不止一種。 一種方法是制作一個組列表。 但這不是處理Pandas DataFrame時的理想方式。 一旦有了列表,就不得不在Python循環中遍歷列表。 與本土熊貓作業相比,這些相對較慢。

假設您有足夠的內存,更好的方法是向DataFrame添加列或索引:

import pandas as pd
df = pd.DataFrame({'STEPS_ID':range(1107,1113)*2})
df['GROUP'] = (df['STEPS_ID'] < df['STEPS_ID'].shift(1)).astype('int').cumsum()
# df.set_index('GROUP', inplace=True, append=True)
print(df)

產量

    STEPS_ID  GROUP
0       1107      0
1       1108      0
2       1109      0
3       1110      0
4       1111      0
5       1112      0
6       1107      1
7       1108      1
8       1109      1
9       1110      1
10      1111      1
11      1112      1

現在,您可以通過調用對每個組執行聚合/轉換操作

df.groupby('GROUP')....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM