Ausgabe
Ich möchte beide Spalten wie col_one und similar_words nehmen. verwendet werden, um nach ähnlichen Wörtern zu suchen Sie werden sehen, dass in col_one zum Beispiel WPH Wörter wie ähnliche_Wörter ist [WP, W, WPH] hat, wenn gefunden, fügen Sie die übereinstimmenden Wörter der neuen Spalte hinzu.
Meistens steht der Name vorne, z. B. ZEN, W, WICE, aber es gibt einige Namen. wieder mit einem Symbol nach dem Namen, z. B. ZEN-R, ZEN-W2, ZEN13P2302A
meine Daten
import pandas as pd
list20 = ['ZEN', 'OOP', 'WICE', 'XO', 'WP', 'K', 'WGE', 'YGG', 'W', 'YUASA', 'XPG', 'ABC', 'WHA', 'WHAUP', 'WFX', 'WINNER', 'WIIK', 'WIN', 'YONG', 'WPH', 'KCE']
data = {
"col_one": ["ZEN", "WPH", "WICE", "YONG", "K", "XO", "WIN", "WP", "WIIK", "YGG-W1", "W-W5", "WINNER", "YUASA", "WGE", "WFX", "XPG", "WHAUP", "WHA", "KCE13P2302A", "OOP-R"],
}
df = pd.DataFrame(data)
df['similar_words'] = df['col_one'].apply(lambda x: [c for c in list20 if c in x])
df
wird wie dieses Bild aussehen
Erwartete Ausgabe
Lösung
Durchlaufen similar_words
Sie das Array und finden Sie die Länge der übereinstimmenden Wörter:
df["match_len"] = df.apply(lambda row: [len(sw) if sw in row["col_one"] else 0 for sw in row["similar_words"]], axis=1)
>> col_one similar_words match_len
>> 0 ZEN [ZEN] [3]
>> 1 WPH [WP, W, WPH] [2, 1, 3]
>> 2 WICE [WICE, W] [4, 1]
Suchen Sie dann den Index des Wortes mit maximaler Länge und geben Sie das Wort an diesem Index zurück:
df["same_word"] = df.apply(lambda row: row["similar_words"]
.index(max(row["match_len"]))], axis=1)
>> col_one similar_words match_len same_word
>> 0 ZEN [ZEN] [3] ZEN
>> 1 WPH [WP, W, WPH] [2, 1, 3] WPH
>> 2 WICE [WICE, W] [4, 1] WICE
Beantwortet von – Azhar Khan
Antwort geprüft von – Mary Flores (FixError Volunteer)