gpt4 book ai didi

pandas - 为 Pandas 数据框中的每个子组添加总行

转载 作者:行者123 更新时间:2023-12-01 05:00:18 25 4
gpt4 key购买 nike

我有一个数据框 df :

BRAND ART_TYPE  YEAR_MONTH metrics  Value
aaa xyz 201510 a 4500
aaa xyz 201510 b 8500
bbc abc 201510 c 3500
bbc abc 201510 d 10000
xxx def 201510 e 15000

我想为每组 (['BRAND','ART_TYPE','YEAR_MONTH']) 添加一个总行
所以结果应该是:
BRAND   ART_TYPE    YEAR_MONTH  metrics Value
aaa xyz 201510 a 4500
aaa xyz 201510 b 8500
aaa xyz 201510 tot 13000
bbc abc 201510 c 3500
bbc abc 201510 d 10000
bbc abc 201510 tot 13500
xxx def 201510 e 15000
xxx def 201510 tot 15000

这该怎么做 ?我们有什么功能吗?我尝试了 apply 和 groupby 功能,没有用。如果需要更多信息,请告诉我。

我试过的代码添加了一列:
df['total'] = df.groupby(['BRAND','ART_TYPE','YEAR_MONTH']).apply(calctot)

def calctot(df):
return(sum(df['Value']))

这给出了一个错误,即使它有效,也会添加一列。

最佳答案

我不得不根据推荐的输出更改输入数据帧。
我改进了函数 calctot - 删除列,然后追加总和行。
level_3 是从旧索引创建的,我将其删除。应用函数 metricsgroupby 列中的新值是 NaN ,所以我用值 tot 填充它们。

#  BRAND ART_TYPE  YEAR_MONTH metrics  Value
#0 aaa xyz 201510 a 4500
#1 aaa xyz 201510 b 8500
#2 bbc abc 201510 c 3500
#3 bbc abc 201510 d 10000
#4 xxx def 201510 e 15000


def calctot(df):
#delete columns
df = df.drop(['BRAND', 'ART_TYPE', 'YEAR_MONTH'], axis=1)
#append sum row, ignoring non-numeric column metrics
return df.append(df.sum(numeric_only=True), ignore_index=True)

#groupby and reset index
df = df.groupby(['BRAND','ART_TYPE','YEAR_MONTH']).apply(calctot).reset_index()
#delete old index column
df = df.drop(['level_3'], axis=1)
#fill NaN to value tot
df['metrics'] = df['metrics'].fillna('tot')

print df
# BRAND ART_TYPE YEAR_MONTH metrics Value
#0 aaa xyz 201510 a 4500
#1 aaa xyz 201510 b 8500
#2 aaa xyz 201510 tot 13000
#3 bbc abc 201510 c 3500
#4 bbc abc 201510 d 10000
#5 bbc abc 201510 tot 13500
#6 xxx def 201510 e 15000
#7 xxx def 201510 tot 15000

关于pandas - 为 Pandas 数据框中的每个子组添加总行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com