如何多次复制Dataframe中的列?

例如


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

pd.DataFrame(df)

我想多次复制该列,并将它们放入同一个数据框中。希望最后变成


    a   b   c

0   1   1   1

1   2   2   2

2   3   3   3

我尝试过的代码需要手动命名列。而且我无法建立一个循环来自动命名列。


有只小跳蛙
浏览 540回答 3
3回答

Cats萌萌

如果你不想手写字母表,你可以这样做:import pandas as pddf = {'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上面链接中定义的函数在哪里。

慕尼黑的夜晚无繁华

您可以使用string.ascii_lowercaseandDataFrame.assign一种有效的方法来执行此操作:from string import ascii_lowercasedf = {'a': (1,2,3)}df = pd.DataFrame(df)# where n is the number of columns you wantn = 5df_new = df.assign(**{x: df.iloc[:, 0] for x in ascii_lowercase[:n]})print(df_new)[输出]   a  b  c  d  e0  1  1  1  1  11  2  2  2  2  22  3  3  3  3  3

四季花海

你可以这样做:names = ['b', 'c', 'd', 'e'] #names for the columnsfor i in names:    df[i] = df['a'] #assigns the columns in a loop
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python