【问题标题】:create multiple dataframes from unique values of a cloumn从列的唯一值创建多个数据框
【发布时间】:2021-01-22 14:04:06
【问题描述】:

我有带有列的数据框(issue_id、summary、source_id)。 source_id 的值范围为 1 到 3。 我想根据 source_id 中的值创建多个名称为 df_1、df_2、df_3 的数据框。

我尝试了 groupby,它给出了一个 dict。但将 dict 转换为 dataframe 只给出 1 个 dataframe。

data_dict={'df'+str(i): grp for i , grp in df.groupby('Source_sys')} pd.DataFrame.from_dict(data_dict,orient = 'index')

输出: 0 df1 问题... df2 问题... df3 问题 ...

【问题讨论】:

  • @jezrael 你能帮帮我吗?

标签: python pandas dataframe


【解决方案1】:

简单的方法是删除其他列并分配不同的名称。 @克里希纳

【讨论】:

    【解决方案2】:

    听起来您需要过滤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' 的新值

    您可以构建数据帧的字典理解并使用 'source_id' 的唯一值来执行此操作:

    dfs = {f'df_{n}': df[df['source_id'] == n] for n in df['source_id'].unique()}
    

    注意这里使用的 f 字符串仅在 3.6 或更高版本中可用。如果您使用的是旧版本,则可以将 f'df_{n}' 替换为 'df_{}'.format(n)

    现在,如果您想单独访问这些数据帧中的任何一个,您可以使用字典的键:

    dfs['df_1']
    

    【讨论】:

    • 直接赋值可能对解决方案没有帮助。如果添加了另一个source_id,我不想更改代码。
    • 我已经编辑了我的解决方案,以便您可以创建一个字典,其中数据帧的数量作为 source_id 的唯一值。这有帮助吗?
    • 谢谢,这正在工作。我还有一个问题。我不想手动传递参数“df_1”来获取数据框。我尝试了循环,但不确定如何在每次迭代时将数据框复制到单独的变量中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2018-03-04
    • 2021-10-30
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    相关资源
    最近更新 更多