将数据帧拆分为两个或多个部分
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
我想创建单独的数据框,其中 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