Pandas:如何根据日期将一个数据帧调整为另一个



我有两个数据框架,用于收集两种不同股票的历史价格序列。我注意到第一种股票的元素是1291,而第二种股票的是1275。这种差异是由于这两种证券在不同的证券交易所上市,因此在某些日期显示出差异。我想做的是保留两个单独的数据帧,但要确保在第一个数据帧中,删除第二个数据帧不存在日期的所有行,以便使两个数据帧完美匹配以进行分析。我读过一些函数,比如merge((或join((,但我不太了解如何使用它们(如果这些是正确的函数(。我感谢那些将利用一些时间回答我问题的人。

"ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 1275 and the array at index 1 has size 1291"

谢谢

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader as web
from scipy import stats
import seaborn as sns
pd.options.display.min_rows= None
pd.options.display.max_rows= None
tickers = ['DISW.MI','IXJ','NRJ.PA','SGOL','VDC','VGT']
wts= [0.19,0.18,0.2,0.08,0.09,0.26]
price_data = web.get_data_yahoo(tickers,
start = '2016-01-01',
end = '2021-01-01')
price_data = price_data['Adj Close']
ret_data = price_data.pct_change()[1:]
port_ret = (ret_data * wts).sum(axis = 1)
benchmark_price = web.get_data_yahoo('ACWE.PA',
start = '2016-01-01',
end = '2021-01-01')

benchmark_ret = benchmark_price["Adj Close"].pct_change()[1:].dropna()
#From now i get error
sns.regplot(benchmark_ret.values,
port_ret.values)
plt.xlabel("Benchmark Returns")
plt.ylabel("Portfolio Returns")
plt.title("Portfolio Returns vs Benchmark Returns")
plt.show()
(beta, alpha) = stats.linregress(benchmark_ret.values,
port_ret.values)[0:2]

print("The portfolio beta is", round(beta, 4))

让我们考虑一个玩具示例。

df1由6天数据组成,df2由5天数据组成。

据我所知,你希望df1也有5天的数据与df2的日期相匹配。

df1

df1 = pd.DataFrame({
'date':pd.date_range('2021-05-17', periods=6),
'px':np.random.rand(6)
})
df1
date        px
0   2021-05-17  0.054907
1   2021-05-18  0.192294
2   2021-05-19  0.214051
3   2021-05-20  0.623223
4   2021-05-21  0.004627
5   2021-05-22  0.127086

df2

df2 = pd.DataFrame({
'date':pd.date_range('2021-05-17', periods=5),
'px':np.random.rand(5)
})
df2
date        px
0   2021-05-17  0.650976
1   2021-05-18  0.393061
2   2021-05-19  0.985700
3   2021-05-20  0.879786
4   2021-05-21  0.463206

代码只考虑在df1和df2中匹配日期。

df1 = df1[df1.date.isin(df2.date)]

输出df1

date        px
0   2021-05-17  0.054907
1   2021-05-18  0.192294
2   2021-05-19  0.214051
3   2021-05-20  0.623223
4   2021-05-21  0.004627

相关内容

  • 没有找到相关文章

最新更新