索引不匹配时如何将DataFrame的两列添加至另一个DataFrame
如何将单行DataFrame的指定列添加到多行DataFrame中
问题场景
我有两个长度不同的DataFrame:
- 第一个DataFrame(记为
first)有1200行,结构如下:
Date Open High Low Close Adj Close Volume 2012-01-09 70.40 50.20 9.40 71.5 1.8 1.8 9447.0
- 第二个DataFrame(记为
second)仅有1行,结构如下:
Name Marcet Cap. Symbol Symbol2 Boerse Info. Periode ISIN WKN Once 1 tpp.us NaN 1 5Y US010001 999000
需要将second中的ISIN和WKN两列添加到first中,期望结果如下:
Date Open High Low Close Adj Close Volume ISIN WKN 2012-01-09 70.40 50.20 9.40 71.5 1.8 1.8 944 US0101 999000
已尝试merge()、concat()方法出现KeyError,且first['ISIN']=second['ISIN'].values无效,求可行解决方案。
解决方案
方法1:直接提取标量赋值
由于second只有1行,直接提取ISIN和WKN的标量值,赋值给first的新列即可,Pandas会自动将标量广播到first的所有行:
first['ISIN'] = second['ISIN'].iloc[0] first['WKN'] = second['WKN'].iloc[0]
如果second的索引不是默认的0,也可以用second['ISIN'].values[0]提取第一个元素,效果一致。
方法2:批量添加多列
如果需要一次性添加多列,可使用assign()方法结合字典推导式,高效提取目标列:
target_cols = ['ISIN', 'WKN'] first = first.assign(**{col: second[col].iloc[0] for col in target_cols})
关于之前方法无效的原因
merge()和concat()需要匹配的键或轴对齐规则,未指定合适参数时会触发KeyError,而此场景无需合并/拼接逻辑,直接赋值更简洁。first['ISIN']=second['ISIN'].values无效大概率是索引对齐问题,提取标量而非Series/数组即可避免该问题。
内容的提问来源于stack exchange,提问作者Mostafa Bouzari
相关产品推荐
相关产品推荐

