熊猫将一个数据框拆分为多个数据框

时间:2019-01-04 21:59:44

标签: pandas

我有一个熊猫数据框,需要将其拆分为多个数据框。我需要拆分的数据帧数取决于我拥有多少个月的数据,即我需要为每个月创建一个新的数据帧。 df:

MONTH   NAME INCOME
201801   A     100$
201801   B      20$
201802   A      30$

所以我需要创建2个数据框。问题是我不知道我将提前多少个月的数据。 我该怎么做

3 个答案:

答案 0 :(得分:3)

您可以使用groupby创建数据帧字典,

df['MONTH'] = pd.to_datetime(df['MONTH'], format = '%Y%m')
dfs = dict(tuple(df.groupby(df['MONTH'].dt.month)))
dfs[1]


    MONTH   NAME    INCOME
0   2018-01-01  A   100$
1   2018-01-01  B   20$

如果您的数据跨越多年,则需要在分组中包括年份

dfs = dict(tuple(df.groupby([df['MONTH'].dt.year,df['MONTH'].dt.month])))
dfs[(2018, 1)]

    MONTH      NAME INCOME
0   2018-01-01  A   100$
1   2018-01-01  B   20$

答案 1 :(得分:2)

您可以使用groupby将数据帧拆分为数据帧列表或datframes字典:

数据帧字典:

dict_of_dfs = {}
for n, g in df.groupby(df['MONTH']):
    dict_of_dfs[n] = g

数据帧列表:

list_of_dfs = []
for _, g in df.groupby(df['MONTH']):
    list_of_dfs.append(g)

答案 2 :(得分:2)

您还可以通过以下方式使用局部变量字典vars():

for m in df['MONTH'].unique():
    temp = 'df_{}'.format(m)    
    vars()[temp] = df[df['MONTH']==m]

每个DataFrame均以名称df_month创建。例如:

df_201801

    MONTH   NAME    INCOME
0   201801  A   100$
1   201801  B   20$