我有一个像这样的熊猫数据框:
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
答案 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
中的DataFrame
与list
一起使用:
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