[英]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.