【问题标题】:Convert GroupBy object to Dataframe (pandas)将 GroupBy 对象转换为数据框(熊猫)
【发布时间】:2021-12-01 07:16:55
【问题描述】:

我正在处理一个存储在 pandas 数据框中的大型数据集。我为操作此数据集而编写的所有方法都适用于数据帧,但其中一些不适用于 GroupBy 对象。

在我的代码中,我想按作者姓名对所有数据进行分组(我可以通过 .groupby() 轻松实现)。不幸的是,这会输出一个 GroupBy 对象,当我想使用仅数据框的方法时,它对我来说不是很有用。

我已经搜索了大量其他帖子,但没有找到任何令人满意的答案...如何将此 GroupBy 对象转换回 DataFrame? (注意:手动选择组并将它们连接到数据框中对我来说太大了,我需要一些自动化的东西)。

【问题讨论】:

  • for group_name, group in df.groupby(your_columns_here): 这里组将为您提供一个数据框,您可以将其传递给您想要的方法
  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • @MuhammadHassan 我没有意识到该组是该元组输出中的数据框!这实际上使我的最终用例(计算每个组中另一列的 value_counts)更容易完成。谢谢!

标签: python pandas dataframe pandas-groupby


【解决方案1】:

不确定我是否理解,所以如果这不是您要查找的内容,请发表评论。

创建数据框:

df = pd.DataFrame({'author':['gatsby', 'king', 'michener', 'michener','king','king', 'tolkein', 'gatsby'], 'b':range(13,21)})

     author   b
0    gatsby  13
1      king  14
2  michener  15
3  michener  16
4      king  17
5      king  18
6   tolkein  19
7    gatsby  20

#create the groupby object
dfg = df.groupby('author')

In [44]: dfg
Out[44]: <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002169D24DB20>

#show groupby works using count()
dfg.count()

          b
author
gatsby    2
king      3
michener  2
tolkein   1

但我认为这就是你想要的。如何将 dfg 恢复为数据框。您只需要对其执行一些不会更改数据的功能。这是一种方式。

df_reverted = dfg.apply(lambda x: x)

     author   b
0    gatsby  13
1      king  14
2  michener  15
3  michener  16
4      king  17
5      king  18
6   tolkein  19
7    gatsby  20

这是另一种方式,可能更快;注意数据框名称 df 和 dfg。

df[dfg['b'].transform('count') > 0]

它正在测试 groupby 并取所有大于零的组(所以一切),返回一个应用于原始数据帧 df 的布尔系列

【讨论】:

  • 嗨乔纳森!虽然这两者都绝对适用于恢复到数据框,但我想要的输出是一个数据框,它已按例如作者姓名(进入“组”)排序。从那以后我意识到我并没有以最好的方式解决问题,最好在原始 df['author'] 列上使用排序函数。
猜你喜欢
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
相关资源
最近更新 更多