如何根据其他列将列添加到 Pandas
How to add a column to Pandas based off of other columns
我正在使用 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: must be convertible to a buffer, not Series
您需要使用 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)而且我没有是时候调试它的内部工作原理了,但是 pandas 部分我很确定 :P
我正在使用 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: must be convertible to a buffer, not Series
您需要使用 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)而且我没有是时候调试它的内部工作原理了,但是 pandas 部分我很确定 :P