我有一个包含以下列的数据框:
日期 | 邮编 | 价格 | |
---|---|---|---|
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 函数来完成。
答案 0 :(得分:3)
使用 groupby
和 transform
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