繁体   English   中英

Pandas:根据索引合并 dataframe 和系列

[英]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_indexright_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 和系列:

  • 首先,通过将系列转换为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM