我有一个熊猫数据帧df1
,看起来像这样:
输入:
Shop Item Card Price
Butcher A AMEX 1.5
Butcher A VISA 0.9
Baker B AMEX 2.5
Baker B VISA 3.5
Candlestick maker C AMEX 1.5
Candlestick maker C VISA 1.5
我知道df1.groupby(["Shop"])['Price'].transform(min)
会给我一列min()
的df1.Price
不过,我想转换为通过VISA支付达到的Price
,以便将折扣与Card
中的其他价值进行比较。如您所见,这并不总是min()
,也不总是max()
。你知道吗
所需输出:
Shop Item Card Price Price with VISA
Butcher A AMEX 1.5 0.9
Butcher A VISA 0.9 0.9
Baker B AMEX 2.5 3.5
Baker B VISA 3.5 3.5
Candlestick maker C AMEX 1.5 1.5
Candlestick maker C VISA 1.5 1.5
我目前的解决方案是基于for
-循环的,公认的丑陋和冗长:
for shop in df1.Shop.unique().tolist():
df_target = df1[df1.Shop == shop]
...
必须有一个更有效的方法(即一个班轮)。你知道吗
如何将groupby().transform()转换为特定的行值,而不是像min()这样的函数结果?
编辑:请注意,并非所有Shop
项目都提供VISA
付款
我认为需要^{} 通过过滤
DataFrame
-仅VISA
行:细节:
如果得到:
这意味着每个组有更多的
VISA
行。你知道吗解决方案是聚合
min
:相关问题 更多 >
编程相关推荐