从 1 列创建多列 pandas

create multiple columns from 1 column pandas

我正在尝试从 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

但列的长度必须与键的长度相同。感谢您的帮助!

最简单的方法是遍历列表并为每个键创建一个新列(旁注:您应该避免使用 list 作为变量的名称,因为您会覆盖原生 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)。现在您有了一个包含重复列的数据框,您可以使用 df.join().

将其添加到原始数据框中

您可以使用 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