我有一个熊猫数据框,需要将其拆分为多个数据框。我需要拆分的数据帧数取决于我拥有多少个月的数据,即我需要为每个月创建一个新的数据帧。 df:
MONTH NAME INCOME
201801 A 100$
201801 B 20$
201802 A 30$
所以我需要创建2个数据框。问题是我不知道我将提前多少个月的数据。 我该怎么做
答案 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$