Я пытаюсь немного очистить некоторые наборы данных, я могу выполнить задачу с помощью некоторых циклов for, но мне нужен более питонический / изумительный способ сделать это.
Это код, который я придумал, данные не настоящие ... но это должно работать
import pandas as pd
# This is a dataframe containing the correct values
correct = pd.DataFrame([{"letters":"abc","data":1},{"letters":"ast","data":2},{"letters":"bkgf","data":3}])
# This is the dataframe containing source data
source = pd.DataFrame([{"c":"ab"},{"c":"kh"},{"c":"bkg"}])
for i,word in source["c"].iteritems():
for j,row in correct.iterrows():
if word in row["letters"]:
source.at[i,"c"] = row["data"]
break
Это моя попытка изумительного пути, но она не удалась из-за того, что понимание списка возвращает генератор:
source["c"] = source["c"].apply(
lambda x: row["data"] if x in row["letters"] else x for row in
correct.iterrows()
)