如何基于条件字典重新计算Pandas DataFrame列值(Python)
问题描述
假设我有如下DataFrame:
| A | B | |
|---|---|---|
| 0 | aa | 4.32 |
| 1 | aa | 7.00 |
| 2 | bb | 8.00 |
| 3 | dd | 74.00 |
| 4 | cc | 30.00 |
| 5 | bb | 2.00 |
另有如下字典,字典键为列A的匹配条件,字典值为对应列B的乘数:
dict1={'aa':-1, 'bb':2}
我想要实现的效果是:当列A的值与字典键匹配时,对应行的列B值乘以字典中的对应乘数,未匹配的行B值保持不变,预期输出结果如下:
| A | B | |
|---|---|---|
| 0 | aa | -4.32 |
| 1 | aa | -7.00 |
| 2 | bb | 16.00 |
| 3 | dd | 74.00 |
| 4 | cc | 30.00 |
| 5 | bb | 4.00 |
请问该如何用Python的Pandas库实现上述需求?
解决方案
核心实现仅需一行代码:
df['B'] *= df['A'].map(dict1).fillna(1)
逻辑说明
df['A'].map(dict1):将列A的取值按照给定字典做映射,匹配到键的返回对应乘数,未匹配到的返回NaN.fillna(1):将未匹配产生的NaN替换为1,保证这部分行的B值乘1后保持原值不变- 直接与列B相乘后赋值回列B,完成计算
完整可运行代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'A': ['aa', 'aa', 'bb', 'dd', 'cc', 'bb'], 'B': [4.32, 7.00, 8.00, 74.00, 30.00, 2.00] }) dict1 = {'aa':-1, 'bb':2} # 执行计算 df['B'] *= df['A'].map(dict1).fillna(1) # 打印结果 print(df)
内容的提问来源于stack exchange,提问作者KiNest
相关产品推荐
相关产品推荐

