我有两个这样的数据帧:

DATE        MAX_AMOUNT  MIN_AMOUNT  MAX_DAY  MIN_DAY    RATE
01/09/2022  20          15          10       5          0.01
01/09/2022  25          20          15       10         0.02
03/09/2022  30          10           5       3          0.03
03/09/2022  40          30          20       5          0.04
04/09/2022  10           5          10       1          0.05


ID  DATE        AMOUNT  DAY 
1   01/09/2022  18      7   
2   01/09/2022  22      11  
3   01/09/2022  30      20  
4   03/09/2022  35      10  
5   04/09/2022  35      10  

我想根据日期将比率值带到第二个DF.此外,相关日期中的金额和日期值必须在适当的范围内(Max_Amount&Min_Amount、Max_Day&Min_Day).

所需的输出如下:

ID  DATE        AMOUNT  DAY RATE
1   01/09/2022  18      7   0.01
2   01/09/2022  22      11  0.02
3   01/09/2022  30      20  
4   03/09/2022  35      10  0.04
5   04/09/2022  35      10  

你能帮我解决这个问题吗?

推荐答案

首先对Series.between筛选列使用merge,然后使用Series.mapRATE列与第一个匹配的ID相加DataFrame.drop_duplicates:

df = df2.merge(df1, on='DATE')
df = (df[df['AMOUNT'].between(df['MIN_AMOUNT'], df['MAX_AMOUNT']) & 
         df['DAY'].between(df['MIN_DAY'], df['MAX_DAY'])])

df2['RATE'] = df2['ID'].map(df.drop_duplicates('ID').set_index('ID')['RATE'])
print (df2)
   ID        DATE  AMOUNT  DAY  RATE
0   1  01/09/2022      18    7  0.01
1   2  01/09/2022      22   11  0.02
2   3  01/09/2022      30   20   NaN
3   4  03/09/2022      35   10  0.04
4   5  04/09/2022      35   10   NaN

Python相关问答推荐

Locust请求中的Python和参数

使用SciPy进行曲线匹配未能给出正确的匹配

Pystata:从Python并行运行stata实例

Matlab中是否有Python的f-字符串等效物

. str.替换pandas.series的方法未按预期工作

pandas滚动和窗口中有效观察的最大数量

用Python解密Java加密文件

如何获得每个组的时间戳差异?

python中csv. Dictreader. fieldname的类型是什么?'

如何获取Python synsets列表的第一个内容?

提高算法效率的策略?

Discord.py -

计算机找不到已安装的库'

jsonschema日期格式

解决Geopandas和Altair中的正图和投影问题

提取最内层嵌套链接

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

对数据帧进行分组,并按组间等概率抽样n行

上传文件并使用Panda打开时的Flask 问题

时长超过24小时如何从Excel导入时长数据