这是简化的上下文。我有几种类型的商品(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
我不确定如何将聚合函数(min,max,sum)应用于数据帧,但使用"特定于行的" /"动态"条件。
谢谢!
答案 0 :(得分:1)
将groupby
与idxmin
一起用于数据框,每个组最少Observable.fromIterable(callServiceCode.getCallServicePartList())
.filter(servicePart -> servicePart.getServicePartFormStatus().isUnanswered())
行,使用左连接将列重命名为merge
到原始数据。
替代解决方案使用sort_values
+ drop_duplicates
:
Price
<强>详细强>:
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