如何根据其他列向Pandas添加列

时间:2015-01-19 11:08:15

标签: python pandas

我使用Pandas并且我有一个非常基本的数据框:

                   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:必须可以转换为缓冲区,而不是Series

1 个答案:

答案 0 :(得分:0)

您需要使用pandas.DataFrame.apply。下面的代码将lambda函数应用于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)

注意:遗憾的是我无法在我的机器上运行哈希位,一些unicode错误(可能是因为我使用的是Python 3)而我没有时间调试它的内部工作原理,但大熊猫部分我非常肯定:P