无需遍历列:如何实现Pandas DataFrame列与匹配字典值相乘?
无需遍历列实现Pandas列值与字典映射值相乘的简洁方法
原始数据定义
import pandas as pd df = pd.DataFrame({ 'category': [1,2,3,4,5], 'a': [5,4,3,3,4], 'b': [3,2,4,3,10], 'c': [3, 2, 1, 1, 1] }) lookup = {1:0, 2:4, 3:1, 4:6, 5:2}
原遍历实现
你原本通过遍历列的方式完成需求:
for t in df.columns[1:]: df[t] = df[t].mul(df['category'].map(lookup)).fillna(df[t])
无遍历的简洁实现
可以利用Pandas的广播特性,一次性对所有目标列完成操作,无需遍历:
# 生成category对应的字典映射值 map_values = df['category'].map(lookup) # 对除category外的所有列执行乘法,保留原列值填充NaN target_cols = df.columns.drop('category') df[target_cols] = df[target_cols].mul(map_values, axis=0).fillna(df[target_cols])
更精简的写法
如果追求代码紧凑,也可以合并为一行逻辑:
df[df.columns.drop('category')] = df.drop('category', axis=1).mul(df['category'].map(lookup), axis=0).fillna(df.drop('category', axis=1))
原理说明:Pandas中DataFrame与一维Series进行运算时,会自动沿行方向广播,让Series的每个值匹配对应行的所有列值完成乘法,省去了手动遍历列的步骤。
内容的提问来源于stack exchange,提问作者mweber
相关产品推荐
相关产品推荐

