![](/img/trans.png)
[英]what is the best way to merge pandas.Dataframe with pandas.Series based on df.columns and Series.index names?
[英]Pandas: Merge dataframe and series based on index
我创建了以下 dataframe priceearning_byyear
,它仍然不完整:
之后,我想将以下系列price
“插入”/合并到上述 df 中:
该系列的一排(2021)太多了,我想在插入上述 df 时将其删除。
我的尝试是:
priceearning_byyear.merge(price.to_frame(), left_index=True)
但我收到以下错误:
MergeError: Must pass right_on or right_index=True
如果我使用right_index=True
,我会得到:
MergeError: Must pass left_on or left_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)
您需要在priceearning_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)
我最近遇到的另一个例子。 我的 dataframe 的索引是日期时间,我的系列是整数。 我所做的是编写一个小的 function 以按以下步骤合并 dataframe 和系列:
注意:function 假设 dataframe 和系列具有相同的长度。
def merge_df_series(x, y):
"""
Merge dataframe and series on index
and rename series column.
"""
series = y.to_frame().set_index(x.index)
return x.merge(series, left_index=True, right_index=True).rename(columns={0: 'y'})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.