动态创建列。为它们分配一个恒定的行向量

时间:2014-09-17 16:55:11

标签: python pandas

假设我有一些数据框df。我想在其中添加四列['A', 'B', 'C, 'D'] ,但这将保留一个常量行向量[1, 2, 3, 4]

当我尝试做的时候:

df[new_columns] = [1,2,3,4]

失败(说['A', 'B', 'C, 'D']不在索引中)。

如何在Pandas中动态创建多列?我是否总是必须使用追加这样的东西?我记得读过(例如@ Jeff对this question的评论),在较新的版本中,支持动态创建列。我错了吗?

2 个答案:

答案 0 :(得分:4)

我认为这是要走的路。这里非常明确的逻辑。

In [19]: pd.concat([df,DataFrame([[1,2,3,4]],columns=list('ABCD'),index=df.index)],axis=1)
Out[19]: 
  label  somedata  A  B  C  D
0     b  1.462108  1  2  3  4
1     c -2.060141  1  2  3  4
2     e -0.322417  1  2  3  4
3     f -0.384054  1  2  3  4
4     c  1.133769  1  2  3  4
5     e -1.099891  1  2  3  4
6     d -0.172428  1  2  3  4
7     e -0.877858  1  2  3  4
8     c  0.042214  1  2  3  4
9     e  0.582815  1  2  3  4

多作业可以工作,但我不认为它是一个很好的解决方案,因为它容易出错(例如说你的某些专栏已经存在,你应该怎么做?)。并且rhs是非常有问题的,因为你通常想要对齐,所以你需要广播并不明显。

答案 1 :(得分:1)

您可以逐列完成:

import pandas as pd
df = pd.DataFrame(index=range(5))
cols = ['A', 'B', 'C', 'D', 'E']
vals = [1, 2, 3, 4, 5]
for c, v in zip(cols, vals):
    df[c] = v
print df

请注意,您提到的另一个问题中提到的最后一个方法的工作原理类似于先手创建每个列:

for a in attrlist:
    df[a] = 0