【问题标题】:Pandas: Merge dataframe and series based on indexPandas:基于索引合并数据框和系列
【发布时间】:2021-03-22 06:04:45
【问题描述】:

我创建了以下数据框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

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

【问题讨论】:

标签: python pandas


【解决方案1】:

你快到了。只需同时传递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)

【讨论】:

    【解决方案2】:

    您需要在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)
    

    result

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2018-11-21
      • 2016-07-23
      • 2021-04-21
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多