我想创建单独的数据框,其中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)
有没有办法根据函数或标准将数据框分成多个部分?
答案 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