2016-06-29 8 views
3

У меня есть Pandas DataFrame, который имеет список целых чисел внутри одного из столбцов. Я хотел бы получить доступ к отдельным элементам в этом списке. Я нашел способ сделать это, используя tolist() и превратив его обратно в DataFrame, но мне интересно, есть ли более простой/лучший способ. В этом примере я добавляю столбец A к среднему элементу списка в столбце B.Доступ к списку в элементе Pandas DataFrame

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 

OK. Немного лучше. Ответ @ 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 
Смежные вопросы