Ich habe einen Datenrahmen wie diesen:
x = pd.DataFrame({
'audio': ['audio1', 'audio1', 'audio2', 'audio2', 'audio3', 'audio3'],
'text': ['text1', 'text2', 'text3', 'text4', 'text5', 'text6'],
'login': ['operator1', 'operator2', 'operator3', 'operator4', 'operator5', 'operator6']
})
Ich versuche es so zu aggregieren:
x1 = x.groupby('audio')['text'].agg(
[
('text1', lambda x : x.iat[0]),
('text2', lambda x : x.iat[1]),
('leven', lambda x: Levenshtein.distance(x.iat[0], x.iat[1])) #some function works with grouped text
]
).reset_index()
und es funktioniert, aber ich muss auch gruppierte Anmeldungen zur Zeile hinzufügen, um die Zeile wie folgt zu erstellen:
audio, text1, text2, leven, login1, login2
Ich habe so etwas versucht, lambda x : x.ait[0, 1]
aber es funktioniert nicht
Antworten:
Wenn ich mir Ihren Datenrahmen anschaue, denke ich darüber nach, den Datenrahmen zu schwenken. Im Folgenden ist mein Ansatz aufgeführt, bei dem mit
groupby().cumcount()
undunstack
mit einigen Spaltenformatierungen ein geschwenkter Datenrahmen erstellt wird.Option 1: Dann können Sie
df.apply
die Funktion anwendenOption 2: ( Ich würde das vorziehen )
Sie können auch ein Listenverständnis verwenden, um dasselbe zu tun. Ersetzen Sie einfach die letzte Zeile durch:
Option 3:
Wenn die Position der
leven
Spalte wichtig ist, können Sie Folgendes verwendendf.insert
:quelle
FuzzyWuzzy
, um den Levenshtein-Suchst du danach:
quelle
Diese Lösung funktioniert hervorragend, wenn Sie viele Spalten haben. Sie erweitert sie automatisch, sodass Sie sie nicht manuell auflisten müssen.
quelle
Sie können Ihren
agg
Ausdruck einfach folgendermaßen ändern :quelle