将相同的列表添加到新列中的 pandas DataFrame 中的每一行

Wmb*_*uch 3 python pandas

在 pandas DataFrame 中,foo例如:

>>> foo
   col1  col2
0     1     0
1     2     0
2     3     1
Run Code Online (Sandbox Code Playgroud)

如果你想添加一个新列,所有列都具有相同的值,你可以这样做

>>> foo['col3'] = 1
>>> foo
   col1  col2  col3
0     1     0     1
1     2     0     1
2     3     1     1
Run Code Online (Sandbox Code Playgroud)

如果您想添加另一个新列,所有列都具有特定值,您可以这样做

>>> foo['col4'] = ['a', 'b', 'c']
>>> foo
   col1  col2  col3  col4
0     1     0     1     a
1     2     0     1     b
2     3     1     1     c
Run Code Online (Sandbox Code Playgroud)

但我想要做的是将相同的列表添加到每一行作为新列。就像是

>>> myList = [True, False, False, True]
>>> foo['col5'] = {...something something something...}
>>> foo
   col1  col2  col3  col4                        col5
0     1     0     1     a  [True, False, False, True]
1     2     0     1     b  [True, False, False, True]
2     3     1     1     c  [True, False, False, True]
Run Code Online (Sandbox Code Playgroud)

使用先前的方法会产生ValueError('Length of values does not match length of ' 'index'). 所以目前我的{...something something something...}路线是foo['col5'] = [myList] * foo.shape[0]。但我想知道,还有更好的方法吗?

cs9*_*s95 8

使用列表理解。

v = [True, False, False, True]
df['col5'] = [v for _ in range(len(df))]
Run Code Online (Sandbox Code Playgroud)

df
   col1  col2                        col5
0     1     0  [True, False, False, True]
1     2     0  [True, False, False, True]
2     3     1  [True, False, False, True]
Run Code Online (Sandbox Code Playgroud)

您可能会想使用

df['col5'] = [True, False, False, True] * len(df)
Run Code Online (Sandbox Code Playgroud)

然而,每条记录实际上引用相同的列表。尝试这个 -

df.loc[0, 'col5'][0] = False
df

   col1  col2                         col5
0     1     0  [False, False, False, True]
1     2     0  [False, False, False, True]
2     3     1  [False, False, False, True]
Run Code Online (Sandbox Code Playgroud)

您将看到更改反映在所有子列表中。