Cree un valor de hash para cada fila de datos con las columnas seleccionadas en el dataframe en pandas python

He hecho una pregunta similar en R sobre la creación de valor de hash para cada fila de datos. Sé que puedo usar algo como hashlib.md5(b'Hello World').hexdigest() para hashlib.md5(b'Hello World').hexdigest() una cadena, pero ¿qué tal una fila en un dataframe?

actualización 01

He redactado mi código de la siguiente manera:

 for index, row in course_staff_df.iterrows(): temp_df.loc[index,'hash'] = hashlib.md5(str(row[['cola','colb']].values)).hexdigest() 

Me parece que no es muy pythonico, ¿alguna solución mejor?

O simplemente:

 df.apply(lambda x: hash(tuple(x)), axis = 1) 

Como ejemplo:

 import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(3,5)) print df df.apply(lambda x: hash(tuple(x)), axis = 1) 0 1 2 3 4 0 0.728046 0.542013 0.672425 0.374253 0.718211 1 0.875581 0.512513 0.826147 0.748880 0.835621 2 0.451142 0.178005 0.002384 0.060760 0.098650 0 5024405147753823273 1 -798936807792898628 2 -8745618293760919309 

Puedes sumr los hashes de todos los elementos en la fila:

 >>> sum(hash(i) for i in df.irow(0)) 1985985746 

Un método diferente sería forzar la fila (un objeto Serie) a una tupla:

 >>> hash(tuple(df.irow(1))) -4901655572611365671 

Para hacerlo en cada fila, adjuntado como una columna se vería así:

 >>> df['hash'] = pd.Series((sum(hash(e) for e in row) for i, row in df.iterrows())) >>> df y x0 hash 0 11.624345 10 1985985746 1 10.388244 11 1545726335 2 11.471828 12 2436256751 3 11.927031 13 2285800314 4 14.865408 14 3717237475 5 12.698461 15 2135377648 6 17.744812 16 2029383679 7 16.238793 17 2404124222 8 18.319039 18 1890913345 9 18.750630 19 2088408352 [10 rows x 3 columns] 

Si prefieres pinchar la tupla de la fila:

 >>> df = df.drop('hash', 1) # lose the old hash >>> df['hash'] = pd.Series((hash(tuple(row)) for _, row in df.iterrows())) >>> df y x0 hash 0 11.624345 10 -7519341396217622291 1 10.388244 11 -6224388738743104050 2 11.471828 12 -4278475798199948732 3 11.927031 13 -1086800262788974363 4 14.865408 14 4065918964297112768 5 12.698461 15 8870116070367064431 6 17.744812 16 -2001582243795030948 7 16.238793 17 4683560048732242225 8 18.319039 18 -4288960467160144170 9 18.750630 19 7149535252257157079 [10 rows x 3 columns]