Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择两个日期之间的数据框行_Python_Pandas_Loops_Dataframe_Date - Fatal编程技术网

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列出了记录的金额和相应的日期
目标是使用迭代并基于df2上的日期,从df1检索df2上每一行的适用速率

示例:df2中第一行的日期为2019-01-03,因此适用的费率为0.974

这里给出的解释()让我了解了如何在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