如果你能只靠其在df2
一个月的一个实例,这里有一个工作解决方案:
首先,根据OP的例子生成样本数据。
请注意,df2
中的第一个日期已更改为演示两个不同月份数的功能。
df1 = pd.DataFrame([[78, 15, "2016-05-23"],
[99, 12, "2015-08-01"]],
columns=['id', 'Grade', 'Date'])
df2 = pd.DataFrame([["2015-08-01", 1.22],
["2015-02-01", 1.12],
["2015-05-01", 1.05],
["2017-01-01", 1.33]],
columns=['Date','rate'])
现在从每个DataFrame
提取一个月的数字并保存为新列:
df1['month_num'] = pd.to_datetime(df1.Date).dt.month
df2['month_num'] = pd.to_datetime(df2.Date).dt.month
最后,计算的df1.Grade
和产品相关的rate
:
df1['Grade_X_rate'] = df1.Grade.multiply(df1.merge(df2[['month_num','rate']],
on="month_num",
how="left").rate
)
id Grade Date month_num Grade_X_rate
0 78 15 2016-05-23 5 15.75
1 99 12 2015-08-01 8 14.64
还能有多重'df2'中同一月的情况?如果同一个月出现在'df2'的两个不同年份呢?预期产出的最终形式是什么?你到目前为止还没有尝试过什么? –