繁体   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