Python熊猫|创建新列 - 根据行特定条件聚合函数

时间:2018-01-23 09:14:27

标签: python pandas dataframe aggregate-functions

这是简化的上下文。我有几种类型的商品(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)应用于数据帧,但使用"特定于行的" /"动态"条件。

谢谢!

1 个答案:

答案 0 :(得分:1)

groupbyidxmin一起用于数据框,每个组最少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