Tengo un marco de datos como este:
x = pd.DataFrame({
'audio': ['audio1', 'audio1', 'audio2', 'audio2', 'audio3', 'audio3'],
'text': ['text1', 'text2', 'text3', 'text4', 'text5', 'text6'],
'login': ['operator1', 'operator2', 'operator3', 'operator4', 'operator5', 'operator6']
})
Estoy tratando de agregarlo así:
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()
y funciona, pero también necesito agregar inicios de sesión agrupados a la fila, para hacer una fila como esta:
audio, text1, text2, leven, login1, login2
Intenté algo así lambda x : x.ait[0, 1]
pero no funciona
Respuestas:
Mirando su marco de datos, estoy pensando en pivotar el marco de datos, a continuación se muestra mi enfoque que utiliza
groupby().cumcount()
yunstack
con un formato de columna para crear un marco de datos pivotado.Opción 1: Entonces puede utilizar
df.apply
para aplicar la funciónOpción 2: ( preferiría esto )
También puede usar una lista de comprensión para hacer lo mismo, simplemente reemplace la última línea con:
Opción 3:
Si la ubicación de la
leven
columna es importante, puede usardf.insert
:fuente
FuzzyWuzzy
uso del algoritmo de distancia de LevenshteinEs esto lo que estás buscando:
fuente
Esta solución funciona muy bien cuando tiene muchas columnas, las expande automáticamente para que no tenga que enumerarlas manualmente.
fuente
Simplemente puede modificar su
agg
expresión de esta manera:fuente