使用groupby创建新的数据框

时间:2018-06-28 21:15:00

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

我读了这个(How to create multiple dataframes from pandas groupby object),但是,在用groupby创建grouped_persons组之后,我仍然不知道如何为每个人创建数据框。

How to create multiple dataframes from pandas groupby object

该代码应更改什么? 我认为这是我问题的一部分:“ df _” +名称+“ 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:语法无效

3 个答案:

答案 0 :(得分:1)

让您的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')

答案 1 :(得分:0)

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

    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']

来取回存储的数据帧

答案 2 :(得分:0)

使用字典存储可变数量的变量。

一个简单的解决方案是使用代表tuple组合的('Person', 'ExpNum')键。您可以通过向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}