将列的名称保留在 groupby 中,并在 pandas 数据框中使用 sum

Posted

技术标签:

【中文标题】将列的名称保留在 groupby 中,并在 pandas 数据框中使用 sum【英文标题】:Keep the name of the columns in a groupby with sum in a pandas data frame 【发布时间】:2019-07-01 19:55:02 【问题描述】:

我必须在 pandas 数据框中进行 groupby (),结果必须是具有相同列(相同名称和相同编号)的数据框。示例:

import pandas as pd

raw_data = 'first_name': ['Jason', 'Molly', 'Jason', 'Jake', 'Molly'], 
    'last_name': ['Miller', 'Jacobson', 'Miller', 'Milner', 'Jacobson'], 
    'age': [42, 73, 42, 24, 73], 
    'point_1': [4, 24, 31, 2, 93],
    'point_2': [25, 94, 57, 62, 70]

df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 
'point_1', 'point_2'])

如果我尝试:

df.groupby(['first_name','last_name','age']).sum()

我有:

                          point_1  point_2
first_name last_name age                  
Amy        Cooze     73         3       70
Jake       Milner    24         2       62
Jason      Miller    42         4       25
Molly      Jacobson  52        24       94
Tina       Ali       36        31       57

而我的专栏只有:

df.groupby(['first_name','last_name','age']).sum().columns.values 

array(['point_1', 'point_2'], dtype=object) 

但我还需要三个初始列。

【问题讨论】:

【参考方案1】:

您分组的列成为索引。如果你不想这样:

df.groupby(['first_name','last_name','age']).sum().reset_index()

【讨论】:

【参考方案2】:

groupby 调用上将as_index 设置为False 应该可以做到。

df.groupby(['first_name','last_name','age'],as_index=False).sum()

【讨论】:

以上是关于将列的名称保留在 groupby 中,并在 pandas 数据框中使用 sum的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas:通过重复项将列组合在一起,并在相应列中连接字符串

LINQ 将列的总和添加到列表条目

将列的数据类型从字符串转换为双精度

使用条件 groupby 计算分类列的百分比并在 Python 中计数

Pandas - 在groupby之后将列转换为新行

Groupby 图 - 包括子组名称