Python 为什么df[“columna”]=df_2[“ColumnB”]不能按预期工作?

Python 为什么df[“columna”]=df_2[“ColumnB”]不能按预期工作?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,给定两个数据帧: #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.4

给定两个
数据帧

#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添加一个列d,我自然会尝试以下方法:

df1["volas"] = df2["Value"]
但是,这将返回一个包含
nan
值的序列(并因此用以下值填充新列):

但是,如果我这样做:

market_values['Volas'] = [i for i in market_volas.Value]
这些值按预期分配

为什么?
我根本看不出问题出在哪里,特别是因为我最初的尝试是建议的。

问题是
df1
中的
index
df2
中的
index
不同

如果索引的长度od
相等,则可以使用:

想到

df1["volas"] = df2["Value"]
在两个数据帧的索引上执行
合并
。您可能想要的是基于一些匹配列的实际合并,例如

df1.merge(df2, on=["Symbol","Date"])
它将根据与其他列的匹配,或者,如果它们的长度相同,则添加来自
df2
的列

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

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

索引没有对齐,因此你得到了
NaN
第二次尝试添加了没有关联索引值的标量值,这就是它工作的原因
df1.merge(df2, on=["Symbol","Date"])
df1["volas"] = df2.Value.values