【问题标题】:Create One Dataframe per unique Values in Pandas在 Pandas 中为每个唯一值创建一个数据框
【发布时间】:2020-01-07 19:59:18
【问题描述】:

你好世界

我会从一列中为每个唯一值创建一个数据框。

下面是我的初始数据框。

Date     Name     Value
01/19     Jean        15
01/19     Jean        15
01/17     Bean        15
01/16     Bean        15
01/19     Jean        15

我找到了一些关于基于唯一值创建数据框的答案,例如:Create Pandas DataFrames from Unique Values in one Column

使用以下代码,我将所有内容都包含在一个列表中。

dfa = [x for _, x in df.groupby('name')]
dfa[0]

output 
Date     Name     Value
01/19     Jean        15
01/19     Jean        15
01/19     Jean        15
Date     Name     Value
01/17     Bean        15
01/16     Bean        15    

但是,我想自动分配数据框的名称而不是这样做:

df_Jean= df[0]
df_Bean= df[1]

以下是预期的输出

df_Jean
Date     Name     Value
01/19     Jean        15
01/19     Jean        15
01/19     Jean        15

【问题讨论】:

    标签: python pandas loops


    【解决方案1】:

    有可能,但在 python 中不是recommended

    for i, g in df.groupby('name'):
        globals()['df_' + str(i)] =  g
    

    或者:

    for i, g in df.groupby('name'):
        globals()[f'df_{i}'] =  g
    

    最好使用dict:

    d = dict(tuple(df.groupby("Name")))
    
    print (d['Jean'])
    print (d['Bean'])
    

    【讨论】:

    • 感谢@jezrael,这可以完成工作:) 但是,您是否知道如何将每个数据帧命名为 df1、df2、.. 而不是名称(如果我想在之后循环可能会更有效)
    【解决方案2】:

    你应该使用字典:

    d = {k:v for k, v in df.groupby("Name")}
    

    然后您可以简单地将名称作为键传递:

    print (d["Jean"])
    
        Date  Name  Value
    0  01/19  Jean     15
    1  01/19  Jean     15
    4  01/19  Jean     15
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 2021-09-23
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多