制作许多重复的列并自动重命名

时间:2017-11-04 15:36:41

标签: python pandas dataframe

我在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]})

我该怎么做?

3 个答案:

答案 0 :(得分:5)

pd.concatadd_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