如何将两个DataFrame对应值相乘并替换原DataFrame内容?
解决DataFrame按列权重替换值的问题
需求说明
将第一个DataFrame中每个word对应的weight,与第二个DataFrame对应列的数值相乘,并用结果替换原有的1/0值。
数据构造(可直接运行)
import pandas as pd # 第一个权重DataFrame df_weights = pd.DataFrame({ 'word': ['book', 'water'], 'weight': [0.2, 0.5] }) # 第二个待处理DataFrame df_data = pd.DataFrame({ 'description': ['xyz', 'abc'], 'book': [1, 0], 'water': [0, 1] })
高效解决方案(向量操作)
通过将权重DataFrame转换为索引匹配的Series,直接对目标列执行元素级乘法:
# 将word设为索引,提取权重Series weight_series = df_weights.set_index('word')['weight'] # 对df_data中匹配的列执行乘法替换 df_data[weight_series.index] = df_data[weight_series.index].mul(weight_series)
处理后df_data的结果:
| description | book | water |
|---|---|---|
| xyz | 0.2 | 0 |
| abc | 0 | 0.5 |
备选循环方案(适合小数据量)
如果需要逐列处理,也可以用循环实现:
for _, row in df_weights.iterrows(): df_data[row['word']] = df_data[row['word']] * row['weight']
说明
- 向量操作方法利用pandas的广播机制,执行效率远高于循环,适合大型数据集。
- 两种方法都会自动匹配列名,无需手动指定对应关系,避免列名变动导致的错误。
内容的提问来源于stack exchange,提问作者Kas
相关产品推荐
相关产品推荐

