为什么df[“columna”]=dfè2[“ColumnB”]没有按预期工作?

2024-04-20 14:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

给定两个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。你知道吗


Tags: datevaluetypenansymbolmarketdf1df2
2条回答

想想

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

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

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

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

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

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

有一个问题,df1中的indexdf2中的index不同。你知道吗

如果长度odindexes相等,则可以使用^{}

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

相关问题 更多 >