gpt4 book ai didi

python Pandas |创建新列 - 基于行特定条件的聚合函数

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:32 25 4
gpt4 key购买 nike

这是简化的上下文。我有多种类型的商品(Goods_ID 0001、0002 和 0003),其中多个商店(A、B、C)的价格不同。

我需要添加两个额外的列“MinPriceShop”和“MinPrice”,用于输出提供最低价格的商店及其各自的价格。

输入df:

Goods_ID    ShopID  Price
0001 A 10
0001 B 12
0002 A 23
0002 B 22
0003 A 5
0003 B 6
0003 C 4.5

所需输出 df:

Goods_ID    ShopID  Price   MinPriceShop   MinPrice
0001 A 10 A 10
0001 B 12 A 10
0002 A 23 B 22
0002 B 22 B 22
0003 A 5 C 4.5
0003 B 6 C 4.5
0003 C 4.5 C 4.5

我不确定如何将聚合函数(最小值、最大值、总和)应用于数据帧,但具有“行特定”/“动态”条件。

谢谢!

最佳答案

使用groupbyidxmin对于每组包含行数最小 Price 的数据框,重命名列和 merge到原始的左连接。

替代解决方案使用sort_values + drop_duplicates :

d = {'ShopID':' MinPriceShop','Price':'MinPrice'}
df1 = df.loc[df.groupby('Goods_ID')['Price'].idxmin()].rename(columns=d)
#alternative solution:
#df1 = df.sort_values(['Goods_ID','Price']).drop_duplicates('Goods_ID').rename(columns=d)

df = pd.merge(df, df1, on='Goods_ID', how='left')
print (df)
Goods_ID ShopID Price MinPriceShop MinPrice
0 1 A 10.0 A 10.0
1 1 B 12.0 A 10.0
2 2 A 23.0 B 22.0
3 2 B 22.0 B 22.0
4 3 A 5.0 C 4.5
5 3 B 6.0 C 4.5
6 3 C 4.5 C 4.5

详细信息:

print (df1)
Goods_ID MinPriceShop MinPrice
0 1 A 10.0
3 2 B 22.0
6 3 C 4.5

关于 python Pandas |创建新列 - 基于行特定条件的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48397963/

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