python - Pandas 根据多个条件更改多个列
问题描述
我在这里显示了一个数据集示例:
df = pd.DataFrame({'product' : ['a', 'a', 'c', 'c', 'd', 'b', 'a', 'b', 'c'],
'unit' : ['ng/L', 'k/uL', 'x10(3)/mcL', 'x10(3)/mcL', 'k/uL', 'ng/L', 'ng/L', 'sss', 'sss'],
'value' : [0.2, 1.0, 67.0, 71.5, 23.2, 71.0, 0.44, 59.3, 12.7],
'market_penetration_rate' : [0.82, 0.64, 77.5, 12.5, 22.5, 88.0, 0.34, 98.2, 87.4]})
我想获取 product = 'a' 和 'unit' = 'ng/l' 的所有行,并将值和单位转换为 value/1000 和 unit = 'ng/ml'
我几乎让它工作了,但我不知道如何在下面的代码中获取值并除以 1000
df.loc[(df['product'] == 'a') & (df['unit']== 'ng/L'), ['value', 'unit']] = ['value'/1000 ,'ng/mL']
代替 'value'/1000 我该放什么?如果我只是在方括号中使用了一个常量,那么它可以工作,但我想获取它已经存在的值并进行除法。
解决方案
你很接近,但我认为你需要为不同的操作分开更新命令:
mask = df['product'].eq('a') & df['unit'].eq('ng/L')
# update value
df.loc[mask, 'value'] /= 1000
# update unit
df.loc[mask,'unit']='ng/mL'
输出:
product unit value market_penetration_rate
0 a ng/mL 0.00020 0.82
1 a k/uL 1.00000 0.64
2 c x10(3)/mcL 67.00000 77.50
3 c x10(3)/mcL 71.50000 12.50
4 d k/uL 23.20000 22.50
5 b ng/L 71.00000 88.00
6 a ng/mL 0.00044 0.34
7 b sss 59.30000 98.20
8 c sss 12.70000 87.40
推荐阅读
- c - 如何在c中使用多个指向一个二维数组的指针?
- postgresql - pgSQL-INSERT 前触发函数检查是否存在具有相同 ID 的记录
- angular - Angular 8 - 检查后表达式已更改
- algorithm - 寻找无重访图遍历路径(所有顶点)的优化策略
- confluent-platform - 无法在 Arcadia BI 工具中加载 KSQL 表
- flutter - 如何从方法中返回两个值
- r - 在 R 中合并具有许多不匹配列的多个大型数据框
- excel - 修改文件信息的VBA飞跃1小时
- julia - 如何访问 Julia 的 CuArray 中的元素并更改其值?
- android-studio - Android Studio 3.6.3 更新不会在单击“运行”图标时启动 apk