使用 groupby 创建新的数据框
Posted
技术标签:
【中文标题】使用 groupby 创建新的数据框【英文标题】:Creating new dataframes using 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: 无效语法
【问题讨论】:
【参考方案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']
取回存储的数据帧
【讨论】:
以上是关于使用 groupby 创建新的数据框的主要内容,如果未能解决你的问题,请参考以下文章