在 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]。但我想知道,还有更好的方法吗?
使用列表理解。
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)
您将看到更改反映在所有子列表中。
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |