Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 如何在数据帧中使用join方法_Python_Pandas - Fatal编程技术网

Python 如何在数据帧中使用join方法

Python 如何在数据帧中使用join方法,python,pandas,Python,Pandas,我有一行代码,它获取前一天的最后一个值,并将其添加到第二天的新列中。很好 df = df.join(df.resample('B', on='Date')['x'].last().rename('xnew'), on=pd.to_datetime((df['Date'] - pd.tseries.offsets.BusinessDay()).dt.date)) 现在我需要类似的东西,但我无法让它工作。 现在,我需要“打开”中当天的第一个值,并将该值复制到新列“打开”中的每一行,每一天 我试过这

我有一行代码,它获取前一天的最后一个值,并将其添加到第二天的新列中。很好

df = df.join(df.resample('B', on='Date')['x'].last().rename('xnew'), on=pd.to_datetime((df['Date'] - pd.tseries.offsets.BusinessDay()).dt.date))
现在我需要类似的东西,但我无法让它工作。
现在,我需要“打开”中当天的第一个值,并将该值复制到新列“打开”中的每一行,每一天
我试过这个,但不起作用:

df = df.join(df.resample('B', on='Date')['Open'].last().rename('opening'), on=pd.to_datetime((df['Date'])))
错误:

ValueError: columns overlap but no suffix specified: Index(['opening'], dtype='object')
我怎样才能做到这一点

与:

…我得到第一个值,我想要的输出是

        Date                 Open       opening
1       2020-06-24 07:00:00  3091.50    3111.25  
2       2020-06-24 07:05:00  3092.50    3111.25
3       2020-06-24 07:10:00  3090.25    3111.25
4       2020-06-24 07:15:00  3089.75    3111.25
下面是一些示例数据。对于本例,现在的天数为7:00h到7:15h:

           Time             Open
Date        
2019-06-20 07:00:00 70000   2927.25
2019-06-20 07:05:00 70500   2927.00
2019-06-20 07:10:00 71000   2927.00
2019-06-20 07:15:00 71500   2926.75
2019-06-21 07:00:00 70000   2932.75
2019-06-21 07:05:00 70500   2932.25
2019-06-21 07:10:00 71000   2933.00
2019-06-21 07:15:00 71500   2930.75
2019-06-24 07:00:00 70000   2942.00
2019-06-24 07:05:00 70500   2941.50
2019-06-24 07:10:00 71000   2942.00
2019-06-24 07:15:00 71500   2941.50
2019-06-25 07:00:00 70000   2925.00
2019-06-25 07:05:00 70500   2925.75
2019-06-25 07:10:00 71000   2926.50
2019-06-25 07:15:00 71500   2926.00
2019-06-26 07:00:00 70000   2902.75
2019-06-26 07:05:00 70500   2903.00
2019-06-26 07:10:00 71000   2904.00
2019-06-26 07:15:00 71500   2904.25

我开始使用与您类似的方法,使用
重采样
。我补充的是,移动所有的值,这样每个值都将第二天作为索引。然后我可以将这些值输入到日期应用的

代码如下:

df['opening']=df.Date.dt.Date.map(df.resample('B',on='Date').Open.first().shift())
开放日期
0   2019-06-20 07:00:00 2927.25 
1   2019-06-20 07:05:00 2927.0  
2   2019-06-20 07:10:00 2927.0  
3   2019-06-20 07:15:00 2926.75 
4   2019-06-21 07:00:00 2932.75 2927.25
5   2019-06-21 07:05:00 2932.25 2927.25
6   2019-06-21 07:10:00 2933.0  2927.25
7   2019-06-21 07:15:00 2930.75 2927.25
8   2019-06-24 07:00:00 2942.0  2932.75
9   2019-06-24 07:05:00 2941.5  2932.75
10  2019-06-24 07:10:00 2942.0  2932.75
11  2019-06-24 07:15:00 2941.5  2932.75
12  2019-06-25 07:00:00 2925.0  2942.0

当然,第一天会有NaN。

这是否回答了您的问题@Narendra Prasath不因为我不想加入两个dataframes@MarkT你能提供一些样本数据吗?画一个解决方案会更容易:)@Hugolmn瞧:)有一些错误。第06-21天的值应为06-20(7:00h,2927.25)的第一个值,依此类推。06-24上的值=2932.75。看起来您的代码取而代之的是7:15的最后一个值。第一天楠真的没问题!我刚刚用
first()
替换了
last()
,效果很好:)
           Time             Open
Date        
2019-06-20 07:00:00 70000   2927.25
2019-06-20 07:05:00 70500   2927.00
2019-06-20 07:10:00 71000   2927.00
2019-06-20 07:15:00 71500   2926.75
2019-06-21 07:00:00 70000   2932.75
2019-06-21 07:05:00 70500   2932.25
2019-06-21 07:10:00 71000   2933.00
2019-06-21 07:15:00 71500   2930.75
2019-06-24 07:00:00 70000   2942.00
2019-06-24 07:05:00 70500   2941.50
2019-06-24 07:10:00 71000   2942.00
2019-06-24 07:15:00 71500   2941.50
2019-06-25 07:00:00 70000   2925.00
2019-06-25 07:05:00 70500   2925.75
2019-06-25 07:10:00 71000   2926.50
2019-06-25 07:15:00 71500   2926.00
2019-06-26 07:00:00 70000   2902.75
2019-06-26 07:05:00 70500   2903.00
2019-06-26 07:10:00 71000   2904.00
2019-06-26 07:15:00 71500   2904.25