我将尝试使用外键和日期范围来合并两个数据框,并将结果保存在一个新的数据框中。请看下面的示例:
请注意,第一个具有FK 2的记录是关键,索引是我的FK。
百分比应用于所有具有相同FK的记录,其中我的日期为: second_df.date <= first_df.date < and second_df.date_NEXT 例如,在2019-01-01和2019-01-04之间,我应用50%的百分比(来自second_df)
我已经搜索了一段时间,寻找一个干净且易于阅读的实现方法...我知道可以在fk上设置索引,并通过指定"value1"列在df上使用apply。 但是,如果有超过5个列,您该如何处理?
希望您能理解我对pandas的很少经验
# 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的记录是关键,索引是我的FK。
百分比应用于所有具有相同FK的记录,其中我的日期为: second_df.date <= first_df.date < and second_df.date_NEXT 例如,在2019-01-01和2019-01-04之间,我应用50%的百分比(来自second_df)
我已经搜索了一段时间,寻找一个干净且易于阅读的实现方法...我知道可以在fk上设置索引,并通过指定"value1"列在df上使用apply。 但是,如果有超过5个列,您该如何处理?
希望您能理解我对pandas的很少经验
编辑1
data1 = {'FK':[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2],
'date':['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06', '2019-01-10', '2019-01-15', '2019-01-25', '2019-01-01', '2019-01-02'],
'value1':[50, 40, 80, 18, 120, 80, 60, 25, 20, 50, 80]}
data2 = {'FK': [1, 1, 1, 1, 1, 2, 2],
'date': ['2019-01-01', '2019-01-05', '2019-01-10', '2019-01-15', '2019-01-25', '2019-01-01',
'2019-01-08'],
'percentage': [50, 80, 40, 60, 90, 48, 40]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
merged_df = pd.merge_asof(df1.sort_values('date'), df2.sort_values('date'), by='FK', on='date').sort_values('FK')
以上数据集出现异常:函数调用具有模糊的参数类型
如果出现此异常,原因是您的列“on”(在我的情况下是FK)被视为字符串而不是日期。
根据Panda文档:[...]此外,这必须是数字列,例如datetime、integer或float。
Month Year
列,方法是使用df1['Y-m'] = df1.date.str[:7], df2['Y-m'] = df2.date.str[:7]
,然后传递给by=['FK', 'Y-m']
。 - BENY