将数据帧拆分为两个或多个部分

split dataframe into two or more parts

我想创建单独的数据框,其中 2 个连续行之间的差异不正好是 60。

从示例数据中,应该有 2 个数据框(每个 3 行)

from StringIO import StringIO

myst="""905034, 'A', 'some value'
905094, 'B', 'some other value'
905154, 'C', 'some value other'
43, 'x', 'some'
103, 'y', 'value'
163, 'z', 'some value'
"""
u_cols=['column1', 'column2', 'column3']

myf = StringIO(myst)
import pandas as pd
df = pd.read_csv(StringIO(myst), sep=',', names = u_cols)

是否有任何方法可以根据函数或标准将数据帧拆分为多个部分?

通常的模式是 compare-cumsum-groupby,类似于

>>> grouped = df.groupby((df.column1.diff() != 60).cumsum())
>>> for i, group in grouped:
...     print("group #:", i)
...     print(group)
...     
group #: 1
   column1 column2              column3
0   905034     'A'         'some value'
1   905094     'B'   'some other value'
2   905154     'C'   'some value other'
group #: 2
   column1 column2        column3
3       43     'x'         'some'
4      103     'y'        'value'
5      163     'z'   'some value'

这是可行的,因为每次新组开始时比较都会给出 True:

>>> df.column1.diff() != 60
0     True
1    False
2    False
3     True
4    False
5    False
Name: column1, dtype: bool

然后它的累加和给出了一个组 ID 号,我们可以将其作为参数传递给 groupby:

>>> (df.column1.diff() != 60).cumsum()
0    1
1    1
2    1
3    2
4    2
5    2
Name: column1, dtype: int32