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

标签 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

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

谢谢!

最佳答案

使用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/

相关文章:

python - `No numeric types to aggregate` 滚动总和和 timedelta 类型错误

python - 不同参数的多个散点图 - Python

python - 导入 Networkx 包时出错

python - 大于 RAM 的对象

python - Pandas 数据框 reshape

python - 如何按值删除列?

python - 如何在 Python 中编写一个在 20 个不同的 csv 文件上运行该函数的函数?

python - 用该组中的第一个非空值填充该组中的所有值

python - 在这个 python 质因数程序中寻找反例

Python 迭代列表和字典