我希望基于'z'值将数据帧拆分为较小的dfs。 在这种情况下,我只想在零(z列)之间取2来作为2 dfs。 即Dataframe1:01/10/2018 0:30-1/10/2018 1:20 和 数据帧2:01/10/2018 2:00-1/10/2018 2:40
对于较大的数据集,如何循环执行此操作? 丢弃零,仅在两者之间插入。
答案 0 :(得分:0)
在这里,我有一个样本数据集,其中包含两列和少量样本行。我已根据条件(col2可被3整除并按其剩余值排列)将这个数据帧分为三个新数据帧。
from datetime import datetime, timedelta
import numpy as np
import pandas as pd
data = pd.DataFrame({'Col1':np.arange(datetime(2018,1,1),datetime(2018,1,12),timedelta(days=1)).astype(datetime),'Col2':np.arange(1,12,1)})
print('Data:')
print(data)
# split dataframe into three dataframes based on the col2 divisible by 3
# col2 % 3 == 0 then data_0
# col2 % 3 == 1 then data_1
# col2 % 3 == 2 then data_2
data_0, data_1, data_2 = data[data['Col2']%3==0], data[data['Col2']%3==1],data[data['Col2']%3==2]
print('Data_0:')
print(data_0)
print('Data_1:')
print(data_1)
print('Data_2:')
print(data_2)
生成的输出为:
Data:
Col1 Col2
0 2018-01-01 1
1 2018-01-02 2
2 2018-01-03 3
3 2018-01-04 4
4 2018-01-05 5
5 2018-01-06 6
6 2018-01-07 7
7 2018-01-08 8
8 2018-01-09 9
9 2018-01-10 10
10 2018-01-11 11
Data_0:
Col1 Col2
2 2018-01-03 3
5 2018-01-06 6
8 2018-01-09 9
Data_1:
Col1 Col2
0 2018-01-01 1
3 2018-01-04 4
6 2018-01-07 7
9 2018-01-10 10
Data_2:
Col1 Col2
1 2018-01-02 2
4 2018-01-05 5
7 2018-01-08 8
10 2018-01-11 11
希望,这可能会对您有所帮助。
答案 1 :(得分:0)
您可以使用groupby。
grouped = df.groupby('z')
dataframes = [grouped.get_group(x) for x in grouped.groups]#list of DataFrames