将值分配给Pandas中的多个列

时间:2015-12-03 19:36:19

标签: python pandas python-2.7 dataframe series

我遵循简单的DataFrame - df

   0
0  1
1  2
2  3

尝试创建新列并为其指定一些值后,如下所示:

df['col2', 'col3'] = [(2,3), (2,3), (2,3)]

我有以下结构

   0 (col2, col3)
0  1    (2, 3)
1  2    (2, 3)
2  3    (2, 3)

但是,我正在寻找一种方法:

   0 col2, col3
0  1    2,   3
1  2    2,   3
2  3    2,   3

4 个答案:

答案 0 :(得分:9)

看起来解决方案很简单:

df['col2'], df['col3'] = zip(*[(2,3), (2,3), (2,3)])

答案 1 :(得分:4)

有一个方便的解决方案,可以通过元组列表将多个序列连接到一个数据框。您可以在分配前的元组列表中构造数据框:

df = pd.DataFrame({0: [1, 2, 3]})
df[['col2', 'col3']] = pd.DataFrame([(2,3), (2,3), (2,3)])

print(df)

   0  col2  col3
0  1     2     3
1  2     2     3
2  3     2     3

例如,当您希望加入任意数量的系列时,这很方便。

答案 2 :(得分:1)

当尝试将多个标量值应用于多个新列时,我遇到了这个问题,找不到更好的方法。如果我遗漏了一些明显的东西,请告诉我,但是df[['b','c']] = 0不起作用。但是这是简化的代码:

# Create the "current" dataframe
df = pd.DataFrame({'a':[1,2]})

# List of columns I want to add
col_list = ['b','c']

# Quickly create key : scalar value dictionary
scalar_dict = { c : 0 for c in col_list }

# Create the dataframe for those columns - key here is setting the index = df.index
df[col_list] = pd.DataFrame(scalar_dict, index = df.index)

或者,似乎更快一点的是使用.assign()

df = df.assign(**scalar_dict)

答案 3 :(得分:0)