2015-01-19 4 views
2

я использую панду и у меня есть очень простой dataframe:Как добавить столбец панд на основе от других столбцов

    session_id    datetime 
5 t0ubmqqpbt01rhce201cujjtm7 2014-11-28T04:30:09Z 
6 k87akpjpl004nbmhf4loiafi72 2014-11-28T04:30:11Z 
7 g0t7hrqo8hgc5vlb7240d1n9l5 2014-11-28T04:30:12Z 
8 ugh3fkskmedq3br99d20t78gb2 2014-11-28T04:30:15Z 
9 fckkf16ahoe1uf9998eou1plc2 2014-11-28T04:30:18Z 

Я желаю, чтобы добавить третий столбец на основе значений текущих столбцов :

df['key'] = urlsafe_b64encode(md5('l' + df['session_id'] + df['datetime'])) 

Но я получаю:

TypeError: must be convertible to a buffer, not Series

ответ

0

Вы должны использовать pandas.DataFrame.apply. В приведенном ниже коде применяется лямбда-функция для каждой строки df. Разумеется, вы могли бы определить отдельную функцию (если вам нужно сделать что-то более сложное).

import pandas as pd 
from io import StringIO 
from base64 import urlsafe_b64encode 
from hashlib import md5 

s = '''     session_id    datetime 
5 t0ubmqqpbt01rhce201cujjtm7 2014-11-28T04:30:09Z 
6 k87akpjpl004nbmhf4loiafi72 2014-11-28T04:30:11Z 
7 g0t7hrqo8hgc5vlb7240d1n9l5 2014-11-28T04:30:12Z 
8 ugh3fkskmedq3br99d20t78gb2 2014-11-28T04:30:15Z 
9 fckkf16ahoe1uf9998eou1plc2 2014-11-28T04:30:18Z''' 

df = pd.read_csv(StringIO(s), sep='\s+') 

df['key'] = df.apply(lambda x: urlsafe_b64encode(md5('l' + x['session_id'] + x['datetime'])), axis=1) 

Примечание: Я не мог получить немного хеширования работает на моей машине, к сожалению, некоторые Юникода ошибки (может быть, потому что я использую Python 3) и у меня нет времени, чтобы отладить внутренние работы из этого, но часть pandas, о которой я почти уверен: P

+0

Я тоже застрял в юникоде, но это правильная функция, спасибо – Tjorriemorrie

Смежные вопросы