从 1 列熊猫创建多列

Ste*_*n G 5 python multiple-columns 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
Run Code Online (Sandbox Code Playgroud)

从某个名称列表中,我想尽可能多地复制该列,只要我的列表中有名称:

list =['a','b','c']
Run Code Online (Sandbox Code Playgroud)

并得到

  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
Run Code Online (Sandbox Code Playgroud)

我试过

df[list] = df
Run Code Online (Sandbox Code Playgroud)

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

ASG*_*SGM 3

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

keys = ['a','b','c']
for k in keys:
    df[k] = df['close']
Run Code Online (Sandbox Code Playgroud)

如果您想在一行中完成此操作,而不需要循环,您可以执行以下操作:

keys = ['a','b','c']
df = df.join(pd.concat([df.close]*len(keys), keys=keys))
Run Code Online (Sandbox Code Playgroud)

从中间向外移动,[df.close]*len(keys)创建一个列表,其中包含与列表中的键一样多的原始数据帧列的副本。然后使用 将它们组合成一个数据帧pd.concat(),并使用列表 ( ) 设置列名称keys=keys。现在您已经有了一个包含重复列的数据框,您可以使用 将其添加到原始数据框df.join()