Python 选择两个日期之间的数据框行
我正在制作以下两张表格:Python 选择两个日期之间的数据框行,python,pandas,loops,dataframe,date,Python,Pandas,Loops,Dataframe,Date,我正在制作以下两张表格: 给出费率和有效期的第一个表df1: 第二个表df2列出了记录的金额和相应的日期 目标是使用迭代并基于df2上的日期,从df1检索df2上每一行的适用速率 示例:df2中第一行的日期为2019-01-03,因此适用的费率为0.974 这里给出的解释()让我了解了如何在df1中的两个日期之间检索df2上的行 但是我没有使用迭代从df1检索df2上每一行的适用速率。如果数据帧不是很大,您可以简单地在一个伪键上进行连接,然后进行过滤,将其缩小到您需要的范围。请参见下面的
- 给出费率和有效期的第一个表df1:
- 第二个表df2列出了记录的金额和相应的日期
但是我没有使用迭代从df1检索df2上每一行的适用速率。如果数据帧不是很大,您可以简单地在一个伪键上进行连接,然后进行过滤,将其缩小到您需要的范围。请参见下面的示例(请注意,我必须稍微更新您的示例以获得正确的日期格式) 那么您
df1
将
rate valid_from valid_to
0 0.974 2018-12-31 2019-01-14
1 0.966 2019-01-15 2019-01-31
2 0.996 2019-02-01 2019-02-28
3 0.998 2019-03-01 2019-03-31
4 0.994 2019-04-01 2019-04-14
5 1.006 2019-04-15 2019-04-30
6 1.042 2019-05-01 2019-05-31
7 1.072 2019-06-01 2019-06-29
8 0.954 2019-06-30 2019-07-31
这是您的第二个数据帧df2
data = {'date': ['03/01/2019','23/01/2019','27/02/2019','14/03/2019','05/04/2019','30/04/2019','14/06/2019'],
'amount': [200,305,155,67,95,174,236,]}
df2 = pd.DataFrame(data)
df2['date'] = pd.to_datetime(df2['date'],format ='%d/%m/%Y')
那么您的df2
将如下所示
date amount
0 2019-01-03 200
1 2019-01-23 305
2 2019-02-27 155
3 2019-03-14 67
4 2019-04-05 95
5 2019-04-30 174
6 2019-06-14 236
您的解决方案:
df1['key'] = 1
df2['key'] = 1
df_output = pd.merge(df1, df2, on='key').drop('key',axis=1)
df_output = df_output[(df_output['date'] > df_output['valid_from']) & (df_output['date'] <= df_output['valid_to'])]
看起来你需要合并?不迭代?@datanovel确实如此,但是如果我没有一个专栏可以加入,我怎么合并?@Brahms如果下面的答案回答了你的问题,你能点击复选标记吗?谢谢。能帮我一点忙吗。
data = {'date': ['03/01/2019','23/01/2019','27/02/2019','14/03/2019','05/04/2019','30/04/2019','14/06/2019'],
'amount': [200,305,155,67,95,174,236,]}
df2 = pd.DataFrame(data)
df2['date'] = pd.to_datetime(df2['date'],format ='%d/%m/%Y')
date amount
0 2019-01-03 200
1 2019-01-23 305
2 2019-02-27 155
3 2019-03-14 67
4 2019-04-05 95
5 2019-04-30 174
6 2019-06-14 236
df1['key'] = 1
df2['key'] = 1
df_output = pd.merge(df1, df2, on='key').drop('key',axis=1)
df_output = df_output[(df_output['date'] > df_output['valid_from']) & (df_output['date'] <= df_output['valid_to'])]
rate valid_from valid_to date amount
0 0.974 2018-12-31 2019-01-14 2019-01-03 200
8 0.966 2019-01-15 2019-01-31 2019-01-23 305
16 0.996 2019-02-01 2019-02-28 2019-02-27 155
24 0.998 2019-03-01 2019-03-31 2019-03-14 67
32 0.994 2019-04-01 2019-04-14 2019-04-05 95
40 1.006 2019-04-15 2019-04-30 2019-04-30 174
55 1.072 2019-06-01 2019-06-29 2019-06-14 236