Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 - Fatal编程技术网

Python 基于间隔为数据帧列指定值

Python 基于间隔为数据帧列指定值,python,pandas,Python,Pandas,我有一个数据框(df)和第二个数据框(df\u value),分别有三列:开始日期(“From”)、结束日期(“To”)和关联值。我想在df中创建第二列,其中包含从df\u value中查找的正确值: 将熊猫作为pd导入 df=pd.数据帧(['30/03/2018'、'01/10/2019'、'03/07/2020'、'05/08/2020'、'06/08/2020'、'10/10/2020'],列=['Date'])) df['Date']=pd.to_datetime(df['Date']

我有一个数据框(
df
)和第二个数据框(
df\u value
),分别有三列:开始日期(“From”)、结束日期(“To”)和关联值。我想在
df
中创建第二列,其中包含从
df\u value
中查找的正确值:

将熊猫作为pd导入
df=pd.数据帧(['30/03/2018'、'01/10/2019'、'03/07/2020'、'05/08/2020'、'06/08/2020'、'10/10/2020'],列=['Date']))
df['Date']=pd.to_datetime(df['Date'],格式='%d/%m/%Y',dayfirst=True)。dt.Date
df_值=pd.数据帧(['01/01/2018','31/12/2018',1.286','01/01/2019','30/06/2019',1.555','01/07/2019','31/12/2019',1.632','01/01/2020','31/12/2020',1.864]],列=['From','To','value')
df_值['From']=pd.to_日期时间(df_值['From'],格式='%d/%m/%Y',dayfirst=True)。dt.date
df_值['To']=pd.To_日期时间(df_值['To'],格式='%d/%m/%Y',dayfirst=True)。dt.date
目前,我已经通过将下面的函数逐行应用于
df
来实现这一点。虽然这样做有效,但我觉得必须有一种更有效的方法:

def固定函数(df):
值=0
行计数器=0
当值==0时:
如果(df['Date']>=df_value.iloc[row_counter,0])&(df['Date'],您可以使用:

将numpy导入为np
date\u col=df.date.values[:,np.newaxis]
x、 y=np.其中((日期列>=df_值从值)和

(date_col下面是一个详细的答案,比较您当前的方法和我提出的另一种方法:

#设置数据
作为pd进口熊猫
将numpy作为np导入
df=pd.数据帧(['30/03/2018'、'01/10/2019'、'03/07/2020'、'05/08/2020'、'06/08/2020'、'10/10/2020'],列=['Date']))
df['Date']=pd.to_datetime(df['Date'],格式='%d/%m/%Y',dayfirst=True)。dt.Date
打印(df)
df_值=pd.数据帧(['01/01/2018','31/12/2018',1.286','01/01/2019','30/06/2019',1.555','01/07/2019','31/12/2019',1.632','01/01/2020','31/12/2020',1.864]],列=['From','To','value')
df_值['From']=pd.to_日期时间(df_值['From'],格式='%d/%m/%Y',dayfirst=True)。dt.date
df_值['To']=pd.To_日期时间(df_值['To'],格式='%d/%m/%Y',dayfirst=True)。dt.date
打印(df_值)
df2=df.copy()
df3=df.copy()
现在将您的方法定义为函数:

def existing():
#df=pd.concat([df,df_值],轴=1)
def固定功能(df):
值=0
行计数器=0
当值==0时:
如果(df['Date']>=df_value.iloc[row_counter,0])&(df['Date']%timeit建议()
[输出]>每个回路1.97 ms±23.2µs(7次运行的平均值±标准偏差,每个1000个回路)

因此,我的方法并不比您现有的方法好,但看起来很像Python:)

您还可以提供一些数据集行作为csv文件,我们可以复制粘贴吗?我现在为这两个DataFrames添加了一些示例数据,比我的解决方案更高级:
401µs±2.92µs/循环(平均±标准偏差为7次运行,每个循环1000次)
import numpy as np

date_col = df.Date.values[:, np.newaxis]
x,y = np.where((date_col >= df_value.From.values) & 
               (date_col <= df_value.To.values))

df["Value"] = df_value.loc[y,"Value"].reset_index(drop = True)
#        Date  Value
#0 2018-03-30  1.286
#1 2019-10-01  1.632
#2 2020-07-03  1.864
#3 2020-08-05  1.864
#4 2020-08-06  1.864
#5 2020-10-10  1.864