Python 在满足列条件后截断数据帧

Python 在满足列条件后截断数据帧,python,pandas,Python,Pandas,因此,我有以下数据帧df: 框架包含在该组中排序的两组数据 第1组从索引359到365(包括索引359和365) 第2组为指数366至371(含) 我想把他们分成两组。可能有两个以上的组。我所应用的逻辑是,只要下一步的ID小于当前的步骤ID,这就标志着组的结束 我可以很容易地通过df获得这个指针。一种方法是列一份小组名单。但这并不是处理数据帧的理想方式。一旦有了一个列表,就必须在Python循环中循环该列表。与本地熊猫相比,这些行动相对缓慢 假设您有足够的内存,更好的方法是向数据帧添加列或索引:

因此,我有以下数据帧df:

框架包含在该组中排序的两组数据

第1组从索引359到365(包括索引359和365)

第2组为指数366至371(含)

我想把他们分成两组。可能有两个以上的组。我所应用的逻辑是,只要下一步的ID小于当前的步骤ID,这就标志着组的结束


我可以很容易地通过df获得这个指针。一种方法是列一份小组名单。但这并不是处理数据帧的理想方式。一旦有了一个列表,就必须在Python循环中循环该列表。与本地熊猫相比,这些行动相对缓慢

假设您有足够的内存,更好的方法是向数据帧添加列或索引:

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)
现在,您可以通过调用

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

有不止一种方法可以将事物分组。一种方法是列一份小组名单。但这并不是处理数据帧的理想方式。一旦有了一个列表,就必须在Python循环中循环该列表。与本地熊猫相比,这些行动相对缓慢

假设您有足够的内存,更好的方法是向数据帧添加列或索引:

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)
现在,您可以通过调用

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

该死,比我快。另外,astype破解在master中已修复,因此您不必再在0.13dang中执行此操作,请击败我。此外,astype hack在master中已修复,因此您将不再需要在0.13中进行此操作。对于将来的问题,如果您使用ctrl-K将数据框粘贴为缩进4个空格的文本,而不是无法复制和粘贴的图像,则回答此问题会容易得多。对于将来的问题,如果您使用ctrl-K将数据框粘贴为缩进4个空格的文本,而不是无法复制和粘贴的图像,那么回答问题就容易多了。