我有一个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
有更好的方法吗?
答案 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的答案是最快的。