我有一个看起来像这样的数据框(carsML
)
+-----------------+----------+--------------+
| carManufacturer | carModel | carType |
+-----------------+----------+--------------+
| VW | POLO | 1.4 TDI |
| VW | POLO | POLO 1.4 TDI |
| VW | POLO | 1.6 TDI |
| VW | POLO | 1.4 |
| VW | POLO | POLO 1.6 TDI |
|+-----------------+----------+--------------+
我要遍历行,检查carModel
中是否包含天气carType
,如果要删除它。因此,与其使用POLO 1.4 TDI,不如使用1.4 TDI。
一个约束-一些carModels
可以是单个字母长(例如1
或A
)。在这种情况下,请跳过更换,而不执行任何操作。脚本仅适用于carModels
len(carModel)>1
到目前为止,我有:
for row in carsML.itertuples():
if len(row.carModel) > 1:
carsML.iloc[row.Index].carType = row.carType.replace(row.carModel,"")
但这并没有改变任何东西。我不知道为什么。
答案 0 :(得分:4)
如果我对您的理解很好,那么以下一线工作可以帮助您完成工作:
carsML.carType = carsML.apply(lambda row: row.carType.strip(row.carModel) if len(row.carModel) > 1 else row.carType, axis=1)
答案 1 :(得分:2)
将OneWayToSource
与Logout
一起使用:
AccountController
输出:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Logout(LogoutInputModel model)
{
...
return Redirect("http:// client url"); // added
//return View("LoggedOut", vm); // commented out
}
答案 2 :(得分:1)
您是如何声明dataFrame的? 我做了测试:
>>> raw_data = {
... 'carManufacturer': ['VW','VW','VW','VW','VW'],
... 'carModel': ['POLO','POLO','POLO','POLO','POLO'],
... 'carType': ['1.4 TDI', 'POLO 1.4 TDI', '1.6 TDI', '1.4', 'POLO 1.6 TDI']
>>> df = pd.DataFrame(raw_data, columns=["carManufacturer", "carModel", "carType"])
>>> df
carManufacturer carModel carType
0 VW POLO 1.4 TDI
1 VW POLO POLO 1.4 TDI
2 VW POLO 1.6 TDI
3 VW POLO 1.4
4 VW POLO POLO 1.6 TDI
完成后:
>>> for row in df.itertuples():
... if len(row.carModel) > 1:
... df.iloc[row.Index].carType = row.carType.replace(row.carModel,"")
...
>>> df
这就是结果:
>>> df
carManufacturer carModel carType
0 VW POLO 1.4 TDI
1 VW POLO 1.4 TDI
2 VW POLO 1.6 TDI
3 VW POLO 1.4
4 VW POLO 1.6 TDI
它运行完美。