【发布时间】:2013-12-06 00:21:05
【问题描述】:
假设我们采用 pandas 数据框...
name age family
0 john 1 1
1 jason 36 1
2 jane 32 1
3 jack 26 2
4 james 30 2
然后做一个groupby() ...
group_df = df.groupby('family')
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean})
然后进行一些聚合/汇总操作(在我的示例中,我的函数name_join 聚合了名称):
def name_join(list_names, concat='-'):
return concat.join(list_names)
因此,分组汇总输出为:
age name
family
1 23 john-jason-jane
2 28 jack-james
问题:
有没有一种快速、有效的方法可以从聚合表中获取以下内容?
name age family
0 john 23 1
1 jason 23 1
2 jane 23 1
3 jack 28 2
4 james 28 2
(注意:age 列值只是示例,我不在乎在此特定示例中平均后丢失的信息)
我认为我可以做到的方式看起来不太有效:
- 创建空数据框
- 在
group_df的每一行中,将名称分开 - 返回一个数据框,其行数与起始行中的名称一样多
- 将输出附加到空数据帧
【问题讨论】:
-
@AndyHayden:也许但这个问题的标题很烂;这个很简单。 (所以如果只有示例用例需要改进,最好改进它而不是关闭它)
-
“存储在 pandas 数据框中的表” 是迂回的。只需学会将数据框视为表格(如果它代表的是它)。
-
这个问题有点笨拙:不要进行聚合/汇总操作然后反转它,只需在
groupby()之后停止,如有必要,对age进行一些平均,然后进行reset_index()
标签: python pandas group-by pandas-groupby