2016-06-29 453 views
3

的元素中访问列表,我有这里面有一列的整数列表的熊猫DataFrame。我想访问此列表中的各个元素。我已经找到一种方法,通过使用tolist()并把它放回一个DataFrame做到这一点,但我想知道如果有一个更简单/更好的办法。在这个例子中,我在B列添加列A到列表的中间元素。一个熊猫数据帧

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 

有没有更好的方法来做到这一点?

回答

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的答案是最快的。

+0

谢谢。非常感激! – Michael

4

一点更直接的是:

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

感谢您闪电般的快速回答! – Michael

0

你也可以简单地尝试以下方法:该方法的

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