如何在 Pandas 数据框中为多个不存在的列分配值?

6

我想要做的是向数据帧中添加列,并用单个值填充它们(对于所有行均相同)。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1,2],[3,4]]), columns = ["A","B"])
arr = np.array([7,8])

# this is what I would like to do
df[["C","D"]] = arr

# and this is what I want to achieve
#    A  B  C  D
# 0  1  2  7  8
# 1  3  4  7  8
# but it yields an "KeyError" sadly
# KeyError: "['C' 'D'] not in index"

我知道赋值功能以及如果一次只添加一列时我如何解决这个问题。我只是想知道是否有一种简洁而简单的方法可以同时添加多个新列,因为我没有找到这样的方法。

2个回答

8
对于我来说,工作是:
df[["C","D"]] = pd.DataFrame([arr], index=df.index)

或者使用join函数:
df = df.join(pd.DataFrame([arr], columns=['C','D'], index=df.index))

或者使用assign方法:
df = df.assign(**pd.Series(arr, index=['C','D']))

print (df)
   A  B  C  D
0  1  2  7  8
1  3  4  7  8

很好的回答。我的收获是,没有基本功能可以做到这一点,但人们必须选择你提供的其中一个解决方法来实现它。我更喜欢你提供的三个选项中的最后一个。 - Dremet

1
您可以使用 assign 并传递一个字典。
df.assign(**dict(zip(['C','D'],[arr.tolist()]*2)))
Out[755]: 
   A  B  C  D
0  1  2  7  7
1  3  4  8  8

“2” 可能不应该硬编码。我也喜欢这个答案,jezaels 的答案看起来更适合 pandas 编程风格。 - Dremet
@Corrumpo 如果是这样,可以使用 len(['C','D']) 来替换 2 :-) - BENY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接