从1列pandas创建多个列

时间:2016-05-18 16:32:53

标签: python pandas multiple-columns

我正在尝试从df(例如

)多次复制列
df.head()

                      close
date                       
2015-09-23 17:00:00  1.3324
2015-09-23 17:01:00  1.3325
2015-09-23 17:02:00  1.3323
2015-09-23 17:03:00  1.3323
2015-09-23 17:04:00  1.3323

从某个名称列表中,我想复制该列,因为我的列表中有名称的次数:

list =['a','b','c']

并获取

  df.head()

                      close    a     b      c
date                       
2015-09-23 17:00:00  1.3324 1.3324 1.3324 1.3324
2015-09-23 17:01:00  1.3325 1.3325 1.3325 1.3325
2015-09-23 17:02:00  1.3323 1.3323 1.3323 1.3323
2015-09-23 17:03:00  1.3323 1.3323 1.3323 1.3323
2015-09-23 17:04:00  1.3323 1.3323 1.3323 1.3323

我试过

df[list] = df

但列必须与密钥长度相同。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

最简单的方法是迭代列表并为每个键创建一个新列(旁注:您应该避免使用list作为变量的名称,因为您将覆盖本机{ {1}}):

list

如果你想在一行中没有循环,你可以执行以下操作:

keys = ['a','b','c']
for k in keys:
    df[k] = df['close']

从中间向外移动,keys = ['a','b','c'] df = df.join(pd.concat([df.close]*len(keys), keys=keys)) 创建一个列表,其中包含原始数据框列的副本数量与列表中的键一样多。然后使用[df.close]*len(keys)将这些数据框合并到一个数据框中,并使用列表(pd.concat())设置列名称。既然您有一个包含重复列的数据框,您可以使用keys=keys将其添加到原始数据框中。

答案 1 :(得分:2)

您可以使用concat

li = ['a','b','c']

df1 = pd.concat([df['close']]*(len(li)+1), axis=1, keys=['close'] + li)
print (df1)
                      close       a       b       c
date                                               
2015-09-23 17:00:00  1.3324  1.3324  1.3324  1.3324
2015-09-23 17:01:00  1.3325  1.3325  1.3325  1.3325
2015-09-23 17:02:00  1.3323  1.3323  1.3323  1.3323
2015-09-23 17:03:00  1.3323  1.3323  1.3323  1.3323
2015-09-23 17:04:00  1.3323  1.3323  1.3323  1.3323