我在Python中使用pandas。
import pandas as pd
假设我有一个数据框
pd.DataFrame({"A": [1,2,3], "B": [3,2,1]})
我想为每列制作三份副本,并将列命名为A1到A4和B1到B4。期望输出的示例:
pd.DataFrame({"A1": [1,2,3], "A2": [1,2,3], "A3": [1,2,3], "A4": [1,2,3], "B1": [3,2,1], "B2": [3,2,1], "B3": [3,2,1], "B4": [3,2,1]})
我该怎么做?
答案 0 :(得分:5)
将pd.concat
与add_suffix
一起使用,即
ndf = pd.concat([df.add_suffix(str(i+1)) for i in range(4)],1)
输出:
A1 B1 A2 B2 A3 B3 A4 B4 0 1 3 1 3 1 3 1 3 1 2 2 2 2 2 2 2 2 2 3 1 3 1 3 1 3 1
对于已排序的列,请使用ndf = ndf.sort_index(1)
答案 1 :(得分:1)
根据您的数据框架,您可以构建以下内容:
pd.DataFrame({'{}{}'.format(c,i): v for c,v in df.to_dict().items()
for i in range(1,5)})
使用df
原始数据框。然后生成:
>>> pd.DataFrame({'{}{}'.format(c,i): v for c,v in df.to_dict().items()
... for i in range(1,5)})
A1 A2 A3 A4 B1 B2 B3 B4
0 1 1 1 1 3 3 3 3
1 2 2 2 2 2 2 2 2
2 3 3 3 3 1 1 1 1
或者稍微短一些(但是一些被认为不太安全的语法:
pd.DataFrame({'%s%s'%(c,i): v for c,v in df.to_dict().items()
for i in range(1,5)})
答案 2 :(得分:1)
df=pd.concat([df]*4,1,keys=[str(i+1) for i in range(4)])
df.columns=df.columns.swaplevel().map(''.join)
df
Out[493]:
A1 B1 A2 B2 A3 B3 A4 B4
0 1 3 1 3 1 3 1 3
1 2 2 2 2 2 2 2 2
2 3 1 3 1 3 1 3 1