我有一个数据框,其中包含数字列和包含字符串作为元素的列表。我想在该数据框中创建一个新列,其中数字列中的每个数字都对应于列表的索引。
示例:
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
答案 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)})