【问题标题】:how to create a new column in a dataframe from values in another? [duplicate]如何从另一个数据框中的值创建一个新列? [复制]
【发布时间】:2021-05-26 03:57:38
【问题描述】:

我有 df1:

index  Year  var1  var2  var3
0      2010  8     9     10
1      2011  11    12    13
.
.
998    2012  4     1     55
999    2011  19    10    18

我有 df2

index  var4
2010   7.5
2011   5.7
2012   4.9

如何在 df1 中创建一个名为 var4 的新列,该列将 Year 与 df2 的 index 匹配并返回 var4。我的两个表有不同的行,我的数据年份在 2008 年到 2018 年之间。

【问题讨论】:

  • 哦,我对合并一无所知。我认为这很有帮助。我要阅读答案。感谢您的帮助。

标签: python pandas database dataframe indexing


【解决方案1】:

按照建议,使用merge:

df1 = pd.DataFrame({"Year": np.random.randint(2010, 2013, size=10),
                    "var1": np.random.randint(20, 40, size=10),
                    "var2": np.random.randint(30, 50, size=10),
                    "var3": np.random.randint(10, 60, size=10)}).rename_axis("index")

df2 = pd.DataFrame({"var4": [7.5, 5.7, 4.9]},
                   index=[2010, 2011, 2012]).rename_axis("index")
>>> pd.merge(df1, df2, left_on="Year", right_index=True, how="left")
       Year  var1  var2  var3  var4
index
0      2010    39    30    19   7.5
1      2012    39    34    51   4.9
2      2010    38    44    12   7.5
3      2011    37    31    39   5.7
4      2012    29    41    42   4.9
5      2010    29    49    57   7.5
6      2011    22    48    13   5.7
7      2011    36    31    53   5.7
8      2011    31    31    56   5.7
9      2010    25    41    43   7.5

【讨论】:

    【解决方案2】:

    我实际上找到了答案,但看起来很蹩脚。如果您有更好的选择,请告诉我。

    df1['var4'] = np.where(df['Year'] == 2010, df2[2010],
                  np.where(df['Year'] == 2011, df2[2011],
                  np.where(df['Year'] == 2012, df2[2012], 'NaN')))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多