如何将整个列表分配给熊猫数据框的每一行

时间:2018-11-02 09:55:17

标签: python pandas list dataframe

我有一个数据框和一个列表

df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]

我想在数据帧的每一行中都有一个列表作为元素。如果我喜欢here

df['C'] = mylist

Pandas尝试每行广播一个值,因此出现错误Length of values does not match length of index

   A  B   C
0  1  4  [10,20,40,50]
1  2  5  [10,20,40,50]
2  3  6  [10,20,40,50]

4 个答案:

答案 0 :(得分:5)

首先,我认为在good idea中使用list大熊猫不是这样。

但可以通过列表理解:

df['C'] = [mylist for i in df.index]
#another solution
#df['C'] = pd.Series([mylist] * len(df))

print (df)

   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]

答案 1 :(得分:4)

使用np.tile的另一种选择:

df['C'] = np.tile(mylist, (len(df),1)).tolist()

print (df)

   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]

答案 2 :(得分:3)

只需用df.assign来完成我的较早答案,即从@jezrael借来的列表理解

>>> df
   A  B
0  1  4
1  2  5
2  3  6

>>> df.assign(C =  [mylist for i in df.index])
   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]

或,将其永久添加到数据框

df = df.assign(C =  [mylist for i in df.index])

另一种实现方法 df.insert

由于我们要指定列的顺序,因此可以使用insert 在此处通过在索引2处插入(因此应在数据帧中插入第三个col)

>>> df.insert(2, 'C', '[10, 20, 30, 40, 50]') # directly assigning the list
>>> df
   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]

答案 3 :(得分:1)

这是另一种解决方案。它利用lambda并“ Pythonally”做事。我认为它更容易阅读。

import pandas as pd
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]
df['combined'] = df.apply(lambda x: mylist, axis=1)
df

enter image description here