gpt4 book ai didi

Pandas - 基于许多聚合函数添加许多新列

转载 作者:行者123 更新时间:2023-12-04 08:33:26 25 4
gpt4 key购买 nike

Pandas 1.0.5

import pandas as pd
d = pd.DataFrame({
"card_id": [1, 1, 2, 2, 1, 1, 2, 2],
"day": [1, 1, 1, 1, 2, 2, 2, 2],
"amount": [1, 2, 10, 20, 3, 4, 30, 40]
})

#add columns
d['count'] = d.groupby(['card_id', 'day'])["amount"].transform('count')
d['min'] = d.groupby(['card_id', 'day'])["amount"].transform('min')
d['max'] = d.groupby(['card_id', 'day'])["amount"].transform('max')
我想将三行转换线更改为一行。我试过这个:
d['count', 'min', 'max'] = d.groupby(['card_id', 'day'])["amount"].transform('count', 'min', 'max')
错误:“类型错误:count() 需要 1 个位置参数,但给出了 3 个”
我也试过这个:
d[('count', 'min', 'max')] = d.groupby(['card_id', 'day']).agg(
count = pd.NamedAgg('amount', 'count')
,min = pd.NamedAgg('amount', 'min')
,max = pd.NamedAgg('amount', 'max')
)
错误:“类型错误:插入列的索引与帧索引不兼容”

最佳答案

使用合并,

d = pd.DataFrame({
"card_id": [1, 1, 2, 2, 1, 1, 2, 2],
"day": [1, 1, 1, 1, 2, 2, 2, 2],
"amount": [1, 2, 10, 20, 3, 4, 30, 40]
})

df_out = d.groupby(['card_id', 'day']).agg(
count = pd.NamedAgg('amount', 'count')
,min = pd.NamedAgg('amount', 'min')
,max = pd.NamedAgg('amount', 'max')
)

d.merge(df_out, left_on=['card_id', 'day'], right_index=True)
输出:
   card_id  day  amount  count  min  max
0 1 1 1 2 1 2
1 1 1 2 2 1 2
2 2 1 10 2 10 20
3 2 1 20 2 10 20
4 1 2 3 2 3 4
5 1 2 4 2 3 4
6 2 2 30 2 30 40
7 2 2 40 2 30 40
groupyby 的输出正在创建一个多级索引,并且此输出的索引与 d 的索引不匹配,因此出现错误。但是,我们可以通过使用合并列名和 right_index=True 将 d 中的列连接到组输出中的索引。

关于Pandas - 基于许多聚合函数添加许多新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64918556/

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