2016-06-29 454 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