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()und unstackmit einigen Spaltenformatierungen ein geschwenkter Datenrahmen erstellt wird.
Option 1:
Dann können Sie df.applydie Funktion anwenden
m = x.assign(k=x.groupby('audio').cumcount().add(1)).set_index(['audio','k']).unstack()
m.columns=[f"{a}{b}" for a,b in m.columns]
m = m.assign(leven=m.apply(lambda x:
Levenshtein.distance(x['text1'],x['text2']),1)).reset_index()
audio text1 text2 login1 login2 leven
0 audio1 text1 text2 operator1 operator2 1
1 audio2 text3 text4 operator3 operator4 1
2 audio3 text5 text6 operator5 operator6 1
Option 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:
m = x.assign(k=x.groupby('audio').cumcount().add(1)).set_index(['audio','k']).unstack()
m.columns=[f"{a}{b}" for a,b in m.columns]
m = m.assign(leven=[Levenshtein.distance(a,b) for
a,b in zip(m['text1'],m['text2'])]).reset_index()
audio text1 text2 login1 login2 leven
0 audio1 text1 text2 operator1 operator2 1
1 audio2 text3 text4 operator3 operator4 1
2 audio3 text5 text6 operator5 operator6 1
Option 3:
Wenn die Position der levenSpalte wichtig ist, können Sie Folgendes verwenden df.insert:
m=x.assign(k=x.groupby('audio').cumcount().add(1)).set_index(['audio','k']).unstack()
m.columns=[f"{a}{b}" for a,b in m.columns]
m.insert(2,'leven',[Levenshtein.distance(a,b) for a,b in zip(m['text1'],m['text2'])])
m=m.reset_index()
audio text1 text2 leven login1 login2
0 audio1 text1 text2 1 operator1 operator2
1 audio2 text3 text4 1 operator3 operator4
2 audio3 text5 text6 1 operator5 operator6