如何在python中将数据集拆分为多个数据帧?

时间:2021-07-30 21:59:03

标签: python pandas dataframe for-loop split

我有一个包含数千行的数据集,其中包含一列“状态”和一些其他列。

示例数据集

sample dataset

import pandas as pd
data = {'State':['C','C','C','R','R','D','D','R','C','C','R','D','R','C','R','D','R'],
        'Qd': [3, 2, 1, 0,2,2,5,7,9,7,14,34,12,10,11,14,15], 
        
df = pd.DataFrame.from_dict(data)

'State' 列有一个循环类型输入值,例如 'C,R,D,R',然后又是 'C,R,D,R'。我想将数据集拆分为多个数据框,例如

df1

df2

df3

每个数据框将包含来自状态列的一个完整循环。如何做到这一点?

我正在考虑创建一个数据帧列表并使用 for 循环将每个循环值存储在每个数据帧中。

1 个答案:

答案 0 :(得分:0)

以下几行假设项目包含一组周期性状态值。 data0 是任何拆分过程之前的熊猫数据框。所有状态值都遵循列表项目中声明的顺序。

import pandas as pd

items=['C','R','D','R']
pattern_length=len(items)
count=0
current_state=data0.State[0]

dataframes=list()
temp_df=pd.DataFrame()
df_count=0

for index, row in data0.iterrows():
  if current_state!=row.State[0]:
    count=count+1
    current_state=row.State[0]

    if count==pattern_length:
      dataframes.append(temp_df)
      temp_df=pd.DataFrame()
      count=0
      df_count=df_count+1

  temp_df=temp_df.append(row, ignore_index=True)
dataframes.append(temp_df)
df_count=df_count+1

注意,dataframes[0]dataframes[1]等都是拆分后的数据帧。此外,df_count 应该为您提供创建的数据框总数。