簡體   English   中英

Pandas 根據多個條件更改多個列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM