访问Pandas DataFrame元素中的列表

时间:2016-06-29 00:32:27

标签: python list pandas indexing dataframe

我有一个Pandas DataFrame,其中一列内有一个整数列表。我想访问此列表中的各个元素。我已经找到了一种方法,可以使用tolist()并将其转回DataFrame,但我想知道是否有更简单/更好的方式。在此示例中,我将列A添加到列B中列表的中间元素。

import pandas as pd
df = pd.DataFrame({'A' : (1,2,3), 'B': ([0,1,2],[3,4,5,],[6,7,8])})
df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1]
df

有更好的方法吗?

3 个答案:

答案 0 :(得分:8)

更直接的是:

df['C'] = df['A'] + df['B'].apply(lambda x:x[1])

答案 1 :(得分:2)

您也可以尝试以下方法:

df['C'] = df['A'] + df['B'].str[1]

此方法的表现:

%timeit df['C'] = df['A'] + df['B'].str[1]
#1000 loops, best of 3: 445 µs per loop

答案 2 :(得分:1)

一种选择是使用apply,这应该比从中创建数据框更快:

df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 

一些速度测试:

%timeit df['C'] = df['A'] + pd.DataFrame(df['B'].tolist())[1]
# 1000 loops, best of 3: 567 µs per loop
%timeit df['C'] = df['A'] + df.apply(lambda row: row['B'][1], axis = 1) 
# 1000 loops, best of 3: 406 µs per loop
%timeit df['C'] = df['A'] + df['B'].apply(lambda x:x[1])
# 1000 loops, best of 3: 250 µs per loop

行。稍微好一些。 @ breucopter的答案是最快的。