根据数字列和列表中的索引从pandas DataFrame创建新列

时间:2020-02-26 17:49:09

标签: python pandas dataframe

我有一个数据框,其中包含数字列和包含字符串作为元素的列表。我想在该数据框中创建一个新列,其中数字列中的每个数字都对应于列表的索引。

示例:

import pandas as pd

bar = ['cat','dog','chicken']
df = pd.DataFrame({'foo':[0,0,1,1,2,2]})

预期输出:

   foo      bar
0    0      cat
1    0      cat
2    1      dog
3    1      dog
4    2  chicken
5    2  chicken

2 个答案:

答案 0 :(得分:1)

一种快速的替代方法是创建一个具有列表理解的数组:

df['bar'] = [bar[x] for x in df['foo']]

使用apply的另一个选项:

df['bar'] = df['foo'].apply(lambda x: bar[x])
print(df)

输出:

   foo      bar
0    0      cat
1    0      cat
2    1      dog
3    1      dog
4    2  chicken
5    2  chicken

答案 1 :(得分:1)

或者您可以使用numpy

import numpy as np
df['bar'] = np.array(bar)[df['foo'].values]

对于更大的数据集,它可以更好地扩展,如下所示:

bar = ['cat','dog','chicken']
df = pd.DataFrame({'foo':np.random.choice(np.arange(3), 10000000)})