我需要找到一種方法來根據條件在行級別替換熊貓資料框中的子字串。( df = pd.DataFrame({'Name':['Meat 1.7 Kg','Chicken 1.9 Kg','Ground Beef 1.0 Kg','Turkey 1.2 kg','Wagyu 400 g'],'Weight':[10,8,2,6,4],'Mult':[4.0,5.2,5.6,5.9,4.9]}))
Name Weight Mult
0 Meat 1.7 Kg 10 4.0
1 Chicken 1.9 Kg 8 5.2
2 Ground Beef 1.0 Kg 2 5.6
3 Turkey 1.2 kg 6 5.9
4 Wagyu 400 g 4 4.9
我需要用'Name'列號替換'Mult'列號。問題是當它最后有'Kg'或'kg'時我需要直接這樣做,但是當它最后有'g'時我需要乘以1000然后替換它。
期望的輸出:
Name Weight Mult
0 Meat 4.0 Kg 10 4.0
1 Chicken 5.2 Kg 8 5.2
2 Ground Beef 5.6 Kg 2 5.6
3 Turkey 5.9 kg 6 5.9
4 Wagyu 4900 g 4 4.9
也許最好只轉換'Mult'替換之前的值,然后對所有行使用相同的條件。
目前我正在嘗試這個:[re.sub(r'(\d \.\d )\s [Kk]g$|(\d \s )g$', b, a) for a, b in zip(df['refid'], df['Mult'].astype(str))],但我不知道如何介紹這個條件。
謝謝。
uj5u.com熱心網友回復:
您可以使用
df['id'] = df.apply(lambda x: re.sub(r'(?i)(\d (?:\.\d )?)(\s*(k)?g)$', lambda z: (str(x['Mult']) if z.group(3) else str(int(x['Mult']*1000))) z.group(2), x['id']), axis=1)
輸出df:
id Weight Mult
0 Meat 4.0 Kg 10 4.0
1 Chicken 5.2 Kg 8 5.2
2 Grounded Beef 5.6 Kg 2 5.6
3 Turkey 5.9 kg 6 5.9
4 Wagyu 4900 g 4 4.9
詳情:
(?i)- 不區分大小寫匹配(\d (?:\.\d )?)- 第 1 組:一位或多位數字,然后是可選的 a.和一位或多位數字序列(\s*(k)?g)- 第 2 組:零個或多個空格,可選的第 3 組捕獲 ak然后是 ag$- 字串結束。
lambda z: (str(x['Mult']) if z.group(3) else str(int(x['Mult']*1000))) z.group(2)替換意味著匹配被替換為Mult列中的值,就像第 3 組匹配 第 2 組值一樣,或者,如果第 3 組不匹配,則將數字乘以 1000,轉換為整數,轉換為字串并立即回傳 Group 2 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433547.html
上一篇:為Pandas中的組分配唯一值
