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