Python 熊猫:基于索引合并数据帧和系列

Python 熊猫:基于索引合并数据帧和系列,python,pandas,Python,Pandas,我创建了以下数据框priceearning\u byyear,但仍然不完整: 之后,我想将以下系列price插入/合并到上述df中: 这个系列有一行(2021)太多了,我想在插入上面的df时删除它 我的尝试是: priceearning_byyear.merge(price.to_frame(), left_index=True) 但我犯了以下错误: MergeError: Must pass right_on or right_index=True 如果我使用right\u index

我创建了以下数据框
priceearning\u byyear
,但仍然不完整:

之后,我想将以下系列
price
插入/合并到上述df中:

这个系列有一行(2021)太多了,我想在插入上面的df时删除它

我的尝试是:

priceearning_byyear.merge(price.to_frame(), left_index=True)
但我犯了以下错误:

MergeError: Must pass right_on or right_index=True
如果我使用
right\u index=True
,我将得到:

MergeError: Must pass left_on or left_index=True

我不明白,为什么它不起作用。感谢您提供的任何指针:-)

您需要在
priceearning\u byyear
中指定要合并的列

data1 = {"year":[x for x in range(2016, 2020)], "eps":[x for x in range(2,12,2)]}
data2 = pd.Series(data = {2016: 1, 2017: 2, 2018: 3, 2019: 4, 2020: 5, 2021: 6})

df1 = pd.DataFrame(data1)
df1.merge(data2.to_frame(name='price'), how='left', left_on="year", right_index=True)

您需要在
priceearning\u byyear
中指定要合并的列

data1 = {"year":[x for x in range(2016, 2020)], "eps":[x for x in range(2,12,2)]}
data2 = pd.Series(data = {2016: 1, 2017: 2, 2018: 3, 2019: 4, 2020: 5, 2021: 6})

df1 = pd.DataFrame(data1)
df1.merge(data2.to_frame(name='price'), how='left', left_on="year", right_index=True)

你就快到了。只需同时通过
left_index
right_index
即可获得如下所示的效果

# Reproduce your data
import pandas as pd
priceearning_byyear = pd.DataFrame(dict(year=[2016,2017,2018,2019,2020], eps=[2.09,2.32,3.00,2.99,3.31])).set_index('year')
price = pd.Series([28.95,42.31,39.44,73.41,132.69,119.99], index=[2016,2017,2018,2019,2020,2021])
price.name = 'Close'
price.index.name='year'

# Merge priceearning_byyear and price by using their indexes
priceearning_byyear.merge(price,left_index=True,right_index=True)


你就快到了。只需同时通过
left_index
right_index
即可获得如下所示的效果

# Reproduce your data
import pandas as pd
priceearning_byyear = pd.DataFrame(dict(year=[2016,2017,2018,2019,2020], eps=[2.09,2.32,3.00,2.99,3.31])).set_index('year')
price = pd.Series([28.95,42.31,39.44,73.41,132.69,119.99], index=[2016,2017,2018,2019,2020,2021])
price.name = 'Close'
price.index.name='year'

# Merge priceearning_byyear and price by using their indexes
priceearning_byyear.merge(price,left_index=True,right_index=True)


这篇文章可能会有帮助这篇文章也可能会帮助你的代码工作。谢谢:-)您的代码也可以工作。谢谢:-)