假设我们采用熊猫数据帧……
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
(注意:年龄列值只是示例,我不关心在这个具体示例中取平均值后丢失的信息)
我认为我能做到的方式看起来效率不高:
>创建空数据框
>从group_df中的每一行,分隔名称
>返回一个数据帧,其行数与起始行中的名称一样多
>将输出附加到空数据帧
解决方法:
粗略的等价物是.reset_index(),但将它想象为groupby()的“对立面”可能没有帮助.
您正在将一个字符串拆分为多个部分,并维护每个部分与“family”的关联. This old answer of mine完成这项工作.
首先将’family’设置为索引列,参考上面的链接,然后在最后重置reset_index()以获得所需的结果.