對于DataFrame df以下
df = pd.DataFrame([('Tesla','Model3', '-', 'Tesla'),
('Tesla', 'ModelS', '-', 'Tesla_MD3'),
('Tesla', 'ModelX', '-', 'Tesla_MD3'),
('Tesla', 'ModelY', '-', 'Tesla'),
('Jeep', 'Wrangler','Grouped','Jeep'),
('Jeep', 'Compass', 'Grouped','Jeep_MD3'),
('Jeep', 'Patriot', 'Grouped','Jeep'),
('Jeep', 'Cherokee','Grouped','Jeep'),
('Ford', 'Mustang', 'Grouped','Ford'),
('Ford', 'F150', 'Grouped','Ford') ],columns=['Make','Model','Status','Type'])
df
Make Model Status Type
0 Tesla Model3 - Tesla
1 Tesla ModelS - Tesla_MD3
2 Tesla ModelX - Tesla_MD3
3 Tesla ModelY - Tesla
4 Jeep Wrangler Grouped Jeep
5 Jeep Compass Grouped Jeep_MD3
6 Jeep Patriot Grouped Jeep
7 Jeep Cherokee Grouped Jeep
8 Ford Mustang Grouped Ford
9 Ford F150 Grouped Engine
我正在嘗試Type使用Make_MD3for all更新該列Make,如果Make_MD3存在于其中的任何一個Models中Make,并且如果Status是Grouped針對那個Make。但如果Status不是Grouped,Type則應按原樣保留Models。如果“Make_MD3”不存在,Type則應保持為Make.
例如,Teslais not Grouped,因此每個模型都保持Type相同。但是JeepisGrouped并且Compassis 有它的Typeas Jeep_MD3,所以Jeep_MD3更新 as the Typefor all Jeep Models。Ford是Grouped,但沒有一個Models有型別Ford_MD3,所以Type保持為Ford
預期產出
Make Model Status Type
0 Tesla Model3 - Tesla #For Tesla Type is maintained for each model seperately since it is not grouped
1 Tesla ModelS - Tesla_MD3
2 Tesla ModelX - Tesla_MD3
3 Tesla ModelY - Tesla
4 Jeep Wrangler Grouped Jeep_MD3 #Since Jeep is grouped, all its Type is changed to Jeep_MD3 since one of the model had Jeep_MD3
5 Jeep Compass Grouped Jeep_MD3
6 Jeep Patriot Grouped Jeep_MD3
7 Jeep Cherokee Grouped Jeep_MD3
8 Ford Mustang Grouped Ford #Even though Ford is grouped, since there is no Ford_MD3 the Type is maintained as Ford.
9 Ford F150 Grouped Ford
換句話說,條件適用于所有makes(例如吉普車)如果make被分組并且如果MD3附加到任何模型types,那么同一組中的所有分組模型make都將附加 MD3。我嘗試了下面的代碼,但它不起作用。有人可以修復這種方法或嘗試一種新方法嗎?
df.loc[df.Status.eq('Grouped'), 'Type'] = df[df.Status.eq('Grouped')].groupby('Make').Type.transform(
lambda x: f"{x.str.replace('_MD3','')}_{MD3}" if x.str.contains('_MD3').any() else x)
uj5u.com熱心網友回復:
嘗試:
df.loc[df.Status == "Grouped", "Type"] = (
df[df.Status == "Grouped"]
.groupby("Make")["Type"]
.transform(
lambda x: x.name "_MD3" if x.str.endswith("_MD3").any() else x.name
)
)
print(df)
印刷:
Make Model Status Type
0 Tesla Model3 - Tesla
1 Tesla ModelS - Tesla_MD3
2 Tesla ModelX - Tesla_MD3
3 Tesla ModelY - Tesla
4 Jeep Wrangler Grouped Jeep_MD3
5 Jeep Compass Grouped Jeep_MD3
6 Jeep Patriot Grouped Jeep_MD3
7 Jeep Cherokee Grouped Jeep_MD3
8 Ford Mustang Grouped Ford
9 Ford F150 Grouped Ford
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527125.html
上一篇:Pandas中的替換方法
下一篇:根據規則獲取字典的鍵
