根据其他列的行中的过滤值在熊猫数据框中创建一个新列

时间:2021-01-06 19:46:30

标签: python pandas dataframe lambda

我有一个包含以下列的数据框:

<头>
日期 邮编 价格
0 2019-01-01 90102 58.02
1 2019-01-01 90102 81.55
2 2019-01-01 90102 11.97
3 2019-01-01 90102 93.23
4 2019-01-01 90103 13.68

我想创建一个第 4 列,它应该具有基于该 zip 和该日期的最高价格的价格比率。

所以我使用了另一个名为 df_max_price 的 df

df_max_price = df.groupby(['Date','Zip'], as_index=False)['Price'].max()
<头>
日期 邮编 价格
0 2019-01-01 90102 93.23
1 2019-01-01 90103 13.68

现在我想在 df 中有一个新列,它是该日期和邮政编码的价格和最大价格的比率

<头>
日期 邮编 价格 比率
0 2019-01-01 90102 58.02 0.622
1 2019-01-01 90102 81.55 0.875
2 2019-01-01 90102 11.97 0.128
3 2019-01-01 90102 93.23 1.000
4 2019-01-01 90103 13.68 1.000

计算基于 58.02/93.23 等。

谁能帮我展示如何使用 lambda 函数来完成。

1 个答案:

答案 0 :(得分:3)

使用 groupbytransform

df['ratio'] = df['Price'] / df.groupby(['Date','Zip'], as_index=False)['Price'].transform('max')['Price']

         Date    Zip  Price     ratio
0  2019-01-01  90102  58.02  0.622332
1  2019-01-01  90102  81.55  0.874718
2  2019-01-01  90102  11.97  0.128392
3  2019-01-01  90102  93.23  1.000000
4  2019-01-01  90103  13.68  1.000000