熊猫使用列表添加列

时间:2020-04-21 10:45:11

标签: python-3.x pandas dataframe

我有一个像这样的熊猫数据框:

col1 col2 col3
 1    8    6
 2    9    5
 5    3    9

现在,我想为数据框的每一行添加一个新列,并使用列表中的值。所以,如果我的清单是这样的:

lst = ["a", "b","c"]

然后我希望最终的数据帧像这样:

col1 col2 col3 name
 1    8    6    a
 1    8    6    b
 1    8    6    c
 2    9    5    a
 2    9    5    b
 2    9    5    c
 5    3    9    a
 5    3    9    b
 5    3    9    c

1 个答案:

答案 0 :(得分:1)

第一个想法是按列表长度使用Index.repeat,然后在新列后附加numpy.tile

lst = ["a", "b","c"]

df1 = (df.loc[df.index.repeat(len(lst))]
             .assign(name=np.tile(lst, len(df)))
             .reset_index(drop=True))
print (df1)
   col1  col2  col3 name
0     1     8     6    a
1     1     8     6    b
2     1     8     6    c
3     2     9     5    a
4     2     9     5    b
5     2     9     5    c
6     5     3     9    a
7     5     3     9    b
8     5     3     9    c

或将cross join中的DataFramelist一起使用:

df1 = df.assign(a=1).merge(pd.DataFrame({'name':lst, 'a':1}), on='a').drop('a', axis=1)
print (df1)
   col1  col2  col3 name
0     1     8     6    a
1     1     8     6    b
2     1     8     6    c
3     2     9     5    a
4     2     9     5    b
5     2     9     5    c
6     5     3     9    a
7     5     3     9    b
8     5     3     9    c