【问题标题】:Why isnt df["ColumA"] = df_2["ColumnB"] working as expected?为什么 df["ColumN"] = df_2["Column"] 没有按预期工作?
【发布时间】:2016-09-22 22:43:28
【问题描述】:

给定两个DataFrames:

#df1
value         Symbol       Date   Type        Value
1109914    AUD 2016-01-29  value   64587.9121    
1109949    CAD 2016-01-29  value   65357.1429
1109970    CHF 2016-01-29  value  111881.8681
1110012     DX 2016-01-29  value   91256.4103

#df2
volas         Symbol       Date  Type     Value
1109915    AUD 2016-01-29  vola  518.5091
1109950    CAD 2016-01-29  vola  360.9474
1109971    CHF 2016-01-29  vola  767.1880
1110013     DX 2016-01-29  vola  495.8913
1110041    EUR 2016-01-29  vola  876.6861
1110062    GBP 2016-01-29  vola  462.6425

如果我想从 df2 向 df1 添加一个列,我自然会试试这个:

df1["volas"] = df2["Value"]

但是,这会返回一个带有 nan 值的系列(并因此用此类填充新列):

1109921   NaN
1110089   NaN
1110138   NaN
1110159   NaN
1110257   NaN
1110450   NaN
1110618   NaN
1110667   NaN
1110688   NaN

但是,如果我这样做:

market_values['Volas'] = [i for i in market_volas.Value]

按预期分配值。

为什么? 我根本看不出问题出在哪里,尤其是因为建议我最初尝试here

【问题讨论】:

  • 索引不对齐,所以你得到NaN 第二次尝试添加没有关联索引值的标量值,这就是它起作用的原因

标签: python python-3.x pandas dataframe


【解决方案1】:

存在df1中的indexdf2中的index不同的问题。

如果长度 od indexes 相等,则可以使用values

df1["volas"] = df2["Value"].values
print (df1)
     value Symbol        Date   Type        Value     volas
0  1109914    AUD  2016-01-29  value   64587.9121  518.5091
1  1109949    CAD  2016-01-29  value   65357.1429  360.9474
2  1109970    CHF  2016-01-29  value  111881.8681  767.1880
3  1110012     DX  2016-01-29  value   91256.4103  495.8913

【讨论】:

    【解决方案2】:

    想想

    df1["volas"] = df2["Value"]
    

    就像在两个数据帧的索引上做一个merge。您可能想要的是基于某些匹配列的实际合并,例如

    df1.merge(df2, on=["Symbol","Date"])
    

    这将根据与其他列的匹配添加来自df2 的列,或者,如果它们具有相同的长度

    df1["volas"] = df2.Value.values
    

    这基本上是您的循环解决方案。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2014-08-04
      • 2021-01-03
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多