我正在尝试从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
但列必须与密钥长度相同。谢谢你的帮助!
答案 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