从列表列中的每个列表中获取第一个元素

时间:2019-01-15 16:53:24

标签: python pandas list dataframe

我有一个数据框,其中的列由数字列表组成:

idx codes       new_column
0   [12,18,5]
1   [22,15]
2   [4]
3   [15,1]

如何向由codes列的第一个列表项组成的数据框添加新列:

idx codes     new_column
0   [12,18,5]  12
1   [22,15]    22
2   [4]         4
3   [15,1]     15

I tried:
    df['new_column']=df['codes'][0]

However, that didn't work.

1 个答案:

答案 0 :(得分:5)

最简单的方法是使用str.get

# df['new_column'] = df['codes'].str.get(0)
df['new_column'] = df['codes'].str[0]

但是,如果没有NaN,我建议您对速度进行列表理解:

df['new_column'] = [l[0] for l in df['codes']]

如果列表可以为空,则可以执行以下操作:

df['new_column'] = [l[0] if len(l) > 0 else np.nan for l in df['codes']]

要使用列表理解来处理NaN,可以使用loc进行子集分配并分配回来。

m = df['codes'].notna()
df.loc[m, 'new_column'] = [
    l[0] if len(l) > 0 else np.nan for l in df.loc[m, 'codes']]

必选的“为什么要列表比较值得”链接:For loops with pandas - When should I care?