【问题标题】:Creating new dataframes using groupby使用 groupby 创建新的数据框
【发布时间】:2018-12-08 00:49:56
【问题描述】:

我读过这篇文章 (How to create multiple dataframes from pandas groupby object),但是,在我使用 groupby 创建 grouped_persons 组后,我仍然不明白如何为每个人创建我的数据框。

How to create multiple dataframes from pandas groupby object

我应该在此代码中进行哪些更改? 我认为这是我的问题的一部分:'df_'+ name +'1'

grouped_persons = df.groupby('Person')
for name, group in grouped_persons
    'df_'+ name +'1' = df.loc[(df.Person == name) & (df.ExpNum == 1)]

文件“”,第 2 行 对于姓名,分组为 grouped_persons ^ SyntaxError: 无效语法

【问题讨论】:

    标签: python python-3.x loops dataframe pandas-groupby


    【解决方案1】:

    对可变数量的变量使用字典。

    一个简单的解决方案是使用代表('Person', 'ExpNum') 组合的tuple 键。您可以通过将groupby 对象提供给tuple,然后将结果提供给dict 来实现此目的。

    来自@KayWittig 的数据。

    df = pd.DataFrame([['Tim', 1, 2], ['Tim', 0, 2],
                       ['Claes', 1, 3], ['Claes', 0, 1],
                       ['Emma', 1, 1], ['Emma', 1, 2]],
                      columns=['Person', 'ExpNum', 'Data'])
    
    df_dict = dict(tuple(df.groupby(['Person', 'ExpNum'])))
    
    print(df_dict)
    
    {('Claes', 0):   Person  ExpNum  Data
                   3  Claes       0     1,
     ('Claes', 1):   Person  ExpNum  Data
                   2  Claes       1     3,
     ('Emma', 1):   Person  ExpNum  Data
                   4   Emma       1     1
                   5   Emma       1     2,
     ('Tim', 0):   Person  ExpNum  Data
                   1    Tim       0     2,
     ('Tim', 1):   Person  ExpNum  Data
                   0    Tim       1     2}
    

    【讨论】:

      【解决方案2】:

      让你的 DataFrame 看起来像这样

      df = pd.DataFrame([['Tim', 1, 2],
                         ['Tim', 0, 2],
                         ['Claes', 1, 3],
                         ['Claes', 0, 1],
                         ['Emma', 1, 1],
                         ['Emma', 1, 2]], columns=['Person', 'ExpNum', 'Data'])
      

      给予

      >>> df
        Person  ExpNum  Data
      0    Tim       1     2
      1    Tim       0     2
      2  Claes       1     3
      3  Claes       0     1
      4   Emma       1     1
      5   Emma       1     2
      

      然后您将直接从 pandas groupby 对象中获取组数据帧

      grouped_persons = df.groupby('Person')
      

      通过

      >>> grouped_persons.get_group('Emma')
        Person  ExpNum  Data
      4   Emma       1     1
      5   Emma       1     2
      

      而且不需要单独存放。

      注意:使用的 Pandas 版本为 '0.23.1',但此功能可能在某些早期版本中也可用。

      编辑:如果您只对带有 ExpNum == 1 的条目感兴趣,我建议在 groupby 之前应用它,例如

      grouped_persons_1 = df[df['ExpNum'] == 1].groupby('Person')
      

      【讨论】:

        【解决方案3】:

        您可以将它存储在这样的字典中。我也更正了您代码中的一些语法错误。

            grouped_persons = df.groupby('Person')
            multi_df = {}
            for name, group in grouped_persons:
               multi_df['df_'+ name +'1'] = df[(df.Person == name) & (df.ExpNum == 1)]
        

        现在您可以使用 multi_df['df_myname_1'] 取回存储的数据帧

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-13
          • 1970-01-01
          • 2018-12-08
          • 1970-01-01
          相关资源
          最近更新 更多