这是简化的上下文。我有几种商品(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
我不确定如何将聚合函数(最小,最大,总和)应用于数据框,但是具有“行特定” /“动态”条件。
谢谢!
用于groupby
具有idxmin
最少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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句