如何为索引不同的同长度DataFrame实现列赋值操作?
解决方法
因为pandas赋值时默认会按索引匹配,所以直接赋值才会出现不匹配的NaN。不用重置索引的话,有以下几种高效的实现方式:
方法1:直接赋值底层数值数组
利用Series.values直接获取数组,跳过索引匹配逻辑,按位置赋值,这是开销最低的方式:
import pandas as pd first = pd.DataFrame({"index": [0, 15, 30], "value": [2.2, 2.2, 2.2]}) second = pd.DataFrame({"value": [3.2, 3.2, 3.2]}) first = first.set_index("index") # 直接赋值values数组 first['value'] = second['value'].values
方法2:使用to_numpy()方法
和values效果一致,是pandas推荐的更清晰的写法:
first['value'] = second['value'].to_numpy()
方法3:通过iloc按位置赋值
利用iloc定位所有行,强制按位置赋值:
first['value'] = second['value'].iloc[:] # 或者更明确的写法 first.iloc[:, first.columns.get_loc('value')] = second['value'].iloc[:]
这些方法都不会修改原DataFrame的索引结构,完全按行的位置对应赋值,避免了reset_index的额外开销。
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

