为了账号安全,请及时绑定邮箱和手机立即绑定

如何多次复制Dataframe中的列?

如何多次复制Dataframe中的列?

有只小跳蛙 2022-01-11 20:21:57
例如df = {'a': (1,2,3)}pd.DataFrame(df)我想多次复制该列,并将它们放入同一个数据框中。希望最后变成    a   b   c0   1   1   11   2   2   22   3   3   3我尝试过的代码需要手动命名列。而且我无法建立一个循环来自动命名列。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

如果你不想手写字母表,你可以这样做:


import pandas as pd


df = {'a': (1,2,3)}

dd = pd.DataFrame(df)


numcopies = 4 #how many copies you want of the original column named 'a'

names = [chr(ord('a') + i) for i in range(1, numcopies+1)]


for n in names:

    dd[n] = dd['a']

chr()和ord()是内置函数,可以方便地生成字母/字符序列。


评论后编辑

它的更简洁版本(无需将名称存储在变量中)是:


for i in range(1, numcopies+1):

    dd[chr(ord('a') + i)] = dd['a']

编辑:具有多个字符的列名

如果您想复制很多列,请查看此答案。这是一种仅基于输入数字生成长度超过 1 个字符的字符串序列的好方法(因此您不会以奇怪的符号作为名称列结束)。


你可以做:


for i in range(1, numcopies+1):

    dd[colnum_string(i)] = dd['a']

column_string上面链接中定义的函数在哪里。


查看完整回答
反对 回复 2022-01-11
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您可以使用string.ascii_lowercaseandDataFrame.assign一种有效的方法来执行此操作:


from string import ascii_lowercase


df = {'a': (1,2,3)}

df = pd.DataFrame(df)


# where n is the number of columns you want

n = 5


df_new = df.assign(**{x: df.iloc[:, 0] for x in ascii_lowercase[:n]})

print(df_new)

[输出]


   a  b  c  d  e

0  1  1  1  1  1

1  2  2  2  2  2

2  3  3  3  3  3



查看完整回答
反对 回复 2022-01-11
?
四季花海

TA贡献1811条经验 获得超5个赞

你可以这样做:


names = ['b', 'c', 'd', 'e'] #names for the columns

for i in names:

    df[i] = df['a'] #assigns the columns in a loop


查看完整回答
反对 回复 2022-01-11
  • 3 回答
  • 0 关注
  • 539 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信