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

时间:2015-03-07 03:41:46

标签: pandas

我想创建单独的数据框,其中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)

有没有办法根据函数或标准将数据框分成多个部分?

1 个答案:

答案 0 :(得分:1)

通常的模式是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