给出两个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添加一个columnd,我自然会尝试这个:
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。
答案 0 :(得分:4)
index
中的df1
与index
中的df2
不同,存在问题。
如果长度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
答案 1 :(得分:3)
想想
df1["volas"] = df2["Value"]
在两个数据帧的索引上执行merge
。你可能会追求的是基于一些匹配列的实际合并,例如
df1.merge(df2, on=["Symbol","Date"])
将根据与其他列的匹配来添加df2
中的列,或者,如果它们具有相同的长度
df1["volas"] = df2.Value.values
这基本上就是你的循环解决方案。