我读了这个(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:语法无效
答案 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}