[英]Pandas change multiple columns based on multiple conditions
我在這里顯示了一個數據集示例:
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]})
我想獲取產品 = '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
可以使用 df.assign 和 np.where 來計算所需的值
df=df.assign(unit=np.where((df['product'].eq('a'))&(df.unit.eq('ng/L')),'ng/ml', df.unit),value=(np.where((df['product'].eq('a'))&(df.unit.eq('ng/L')),df.value/1000, df.value)))
pr
oduct unit value market_penetration_rate
0 a ng/ml 0.20 0.82
1 a k/uL 1.00 0.64
2 c x10(3)/mcL 67.00 77.50
3 c x10(3)/mcL 71.50 12.50
4 d k/uL 23.20 22.50
5 b ng/L 71.00 88.00
6 a ng/ml 0.44 0.34
7 b sss 59.30 98.20
8 c sss 12.70 87.40
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.