python - 基于不同列中特定值的计算的新列
问题描述
我试图通过仅对某些值进行计算来创建一个新列,具体取决于它们是否与不同列中的某个字符串匹配。例如,
df1 = pd.DataFrame({'currency': ['USD', 'PKR', 'PKR', 'USD'], 'amount': [1000, 34000, 40000, 560]})
我想创建一个新列,我想在其中拥有相同的 PKR 值,但我希望 USD 值乘以 150。
这就是我想要的,
total = [150000, 34000, 40000, 84000]
df1['total'] = total
在这里,我手动将美元值相乘。我有兴趣获得总专栏。
解决方案
用于numpy.where
按条件设置值:
df1['total'] = np.where(df1['currency'] == 'USD', df1['amount'] * 150, df1['amount'])
print (df1)
currency amount total
0 USD 1000 150000
1 PKR 34000 34000
2 PKR 40000 40000
3 USD 560 84000
currency
另一个想法,特别是如果需要按列创建字典的多个值,使用Series.map
,不匹配的值替换为1
最后多个列:
df1['total'] = df1['currency'].map({'USD':150}).fillna(1).mul(df1['amount'])
例如,如果还想通过PKR
with倍增20
:
df1['total'] = df1['currency'].map({'USD':150, 'PKR':20}).fillna(1).mul(df1['amount'])
print (df1)
currency amount total
0 USD 1000 150000
1 PKR 34000 680000
2 PKR 40000 800000
3 USD 560 84000
推荐阅读
- asp.net-mvc - 在 MVC 中,如何从 AjaxHelper 获取 HtmlHelper 的实例?
- python - 理解不同表示下的浮点乘法
- android - NsdManager 从未在 Google Pixel 3 (Pie) 上发现任何服务
- java - 当我有 1 时,方法在下一行给我 2 输入
- node.js - HTTPS 请求,指定主机名和特定 IP 地址
- java - 如何修复 MostHomophones 类和 MyHashedMap 接口上的“查找”方法
- spring - Spring Boot 启动时无法执行 data.sql 和 schema.sql
- angularjs - 通过 typeahead 获取输入中生成的值的一部分
- c++ - 尝试循环检查 Nullptr C++
- firebase - 是否可以通过 null 或 undefined 查询 firebase 节点?