我有带有列(issue_id,summary,source_id)的数据框。 source_id的值范围是1到3。 我想根据source_id中的值创建多个名为df_1,df_2,df_3的数据框。
我尝试了groupby,它给出了一个命令。但是将dict转换为数据框只会得到1个数据框。
data_dict = {'df'+ str(i):i的grp,df.groupby('Source_sys')中的grp pd.DataFrame.from_dict(data_dict,orient ='index')
输出: 0 df1问题... df2问题... df3问题...
答案 0 :(得分:0)
简单的方法是删除其他列并分配不同的名称。 @krishna
答案 1 :(得分:0)
听起来您需要过滤source_id
上的数据帧。例如,下面的代码将生成一个source_id等于1的数据帧:
df[df['source_id']==1]
如果要将其分配给新变量,可以执行以下操作:
df_1 = df[df['source_id']==1].copy()
请注意,由于要创建原始数据帧的切片,因此添加了.copy()
。如果您希望以其他任何方式更改df_1,则在此处使用.copy()
可以避免抛出SettingWithCopyWarning。
您可以构建数据帧的字典理解,并使用'source_id'
的唯一值来做到这一点:
dfs = {f'df_{n}': df[df['source_id'] == n] for n in df['source_id'].unique()}
请注意,此处仅在3.6或更高版本中使用f字符串。如果您使用的是旧版本,则可以将f'df_{n}'
替换为'df_{}'.format(n)
。
现在,如果您只想访问这些数据框中的任何一个,则可以使用字典的键:
dfs['df_1']