3 回答
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上面链接中定义的函数在哪里。
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
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
添加回答
举报