Python 使用索引作为键和日期合并两个数据帧

Python 使用索引作为键和日期合并两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我尝试使用FK合并两个数据帧,并在两个日期之间合并,然后将输出保存在新的数据帧中 考虑以下示例: # first_df FK date value1 value2 ... (more columns) 1 2019-01-01 50 50 1 2019-01-02 40 80 1 2019-01-03 80 20 1 2019-01-04 18 44 1

我尝试使用FK合并两个数据帧,并在两个日期之间合并,然后将输出保存在新的数据帧中

考虑以下示例:

# first_df 
FK    date          value1   value2 ... (more columns)
1     2019-01-01    50       50
1     2019-01-02    40       80
1     2019-01-03    80       20
1     2019-01-04    18       44
1     2019-01-05    120      50
1     2019-01-06    80       0
1     2019-01-10    60       65
1     2019-01-15    25       44
1     2019-01-25    20       20
2     2019-01-01    50       40
2     2019-01-02    80       45
...............................


# second_df
FK    date          percentage
1     2019-01-01    50
1     2019-01-05    80
1     2019-01-10    40
1     2019-01-15    60
1     2019-01-25    90
2     2019-01-01    48
2     2019-01-08    40
2     2019-01-20    48
......................


# output_df
FK    date          value1            value2 ... (more columns)
1     2019-01-01    50% of 50 = 25    50% of 50 = 25
1     2019-01-02    50% of 40 = 20    50% of 80 = 40
1     2019-01-03    50% of 80 = 40    50% of 20 = 10
1     2019-01-04    50% of 18 = 9     50% of 44 = 22
1     2019-01-05    80% of 120 = 96   80% of 50 = 40
1     2019-01-06    80% of 80 = 64    80% of 0 = 0
1     2019-01-10    40% of 60 = 24    40% of 65 = 26
1     2019-01-15    60% of 25 = 15    60% of 44 = 26.4
1     2019-01-25    90% of 20 = 18    90% of 20 = 18
2     2019-01-01    48% of 50 = 24    48% of 40 = 19.2
2     2019-01-02    48% of 80 = 38.4  48% of 45 = 21.6
请注意带有FK 2的第一条记录,如您所见,索引是my FK

百分比应用于具有相同FK的所有记录,其中我的日期为:
second\u df.date在您的案例中,我们使用
merge\u asof

df=pd.merge_asof(df1.sort_values('date'),df2.sort_values('date'),by='FK',on='date').sort_values('FK')
然后我们有
百分比
和同一df中的值,我们可以做多次

df[['value1','value2']]=df[['value1','value2']].mul(df.percentage/100,0)

谢谢你快速准确的回答。在数据集上调用merge_asof(检查我的edit1)时,我得到了一个参数类型不明确的
函数调用。在我的情况下,使用格式为“YYYY-MM-DD”的FK不被视为日期,而被视为字符串。。。(根据doc,列“on”必须是日期、整数或浮点)。所以使用这个:帮助转换成日期时间并修复了我的问题你知道只有在月份相同的情况下我才能合并数据吗?我看到有一个“宽容”选项,但这一个似乎只需要一段时间。。。(这是事先未知的)@WilliamW通过
df1['Y-m']=df1.date.str[:7],df2['Y-m']=df2.date.str[:7]
,然后通过=['FK','Y-m']传递到

df[['value1','value2']]=df[['value1','value2']].mul(df.percentage/100,0)