Python 如何在DataFrame中复制N次列?
我有一个只有一列的数据框,我想得到一个有N列的数据框,所有这些都与第一列相同。我可以简单地通过以下方式复制它:Python 如何在DataFrame中复制N次列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个只有一列的数据框,我想得到一个有N列的数据框,所有这些都与第一列相同。我可以简单地通过以下方式复制它: df[['new column name']] = df[['column name']] 但我必须制作1000多个相同的栏目,这就是为什么它不起作用的原因 . 一件重要的事情是,列中的数字应该更改,例如,如果第一列为0,第n列为n,前一列为n-1,则表示您有一个df:,列名为“company\u name”,由8家公司组成: df = {"company_name&quo
df[['new column name']] = df[['column name']]
但我必须制作1000多个相同的栏目,这就是为什么它不起作用的原因
. 一件重要的事情是,列中的数字应该更改,例如,如果第一列为0,第n列为n,前一列为n-1,则表示您有一个
df:
,列名为“company\u name”,由8家公司组成:
df = {"company_name":{"0":"Telia","1":"Proximus","2":"Tmobile","3":"Orange","4":"Telefonica","5":"Verizon","6":"AT&T","7":"Koninklijke"}}
company_name
0 Telia
1 Proximus
2 Tmobile
3 Orange
4 Telefonica
5 Verizon
6 AT&T
7 Koninklijke
您可以使用循环
和范围
来确定要创建多少相同的列,并执行以下操作:
for i in range(0,1000):
df['company_name'+str(i)] = df['company_name']
这将导致df的形状
:
df.shape
(8, 1001)
i、 它将相同的列复制了1000次。重复的列的名称将与原始列的名称相同,并在末尾加上一个整数(=+1):
'company_name', 'company_name0', 'company_name1', 'company_name2','company_name..N'
使用df将列“C”复制5次。分配:
n = 5
df2 = df.assign(**{f'C{i}': df['C'] for i in range(1, n+1)})
df2
A B C C1 C2 C3 C4 C5
0 x x x x x x x x
1 y x z z z z z z
将n
设置为1000以获得所需的输出
您还可以直接将结果分配回:
df[[f'C{i}' for i in range(1, n+1)]] = df[['C']*n].to_numpy()
df
A B C C1 C2 C3 C4 C5
0 x x x x x x x x
1 y x z z z z z z
如果是单列,您可以使用Transpose,然后使用pd.concat
简单地复制它们,并将其转换回原始格式,这样可以避免循环,而且应该更快,然后您可以在第二行中更改列名,但如果不处理数据帧中的所有数据,这将是最消耗性能的:
import pandas as pd
df = pd.DataFrame({'Column':[1,2,3,4,5]})
原始数据帧:
Column
0 1
1 2
2 3
3 4
4 5
df = pd.concat([df.T]*1000).T
输出:
Column Column Column Column ... Column Column Column Column
0 1 1 1 1 ... 1 1 1 1
1 2 2 2 2 ... 2 2 2 2
2 3 3 3 3 ... 3 3 3 3
3 4 4 4 4 ... 4 4 4 4
4 5 5 5 5 ... 5 5 5 5
[5 rows x 1000 columns]
df.columns = ['Column'+'_'+str(i) for i in range(1000)]
我认为最有效的方法是使用索引,而不是使用外部循环
n = 3
new_df = df.loc[:, ['column_duplicate']*n +
df.columns.difference(['column_duplicate']).tolist()]
print(new_df)
column_duplicate column_duplicate column_duplicate other
0 0 0 0 10
1 1 1 1 11
2 2 2 2 12
3 3 3 3 13
4 4 4 4 14
5 5 5 5 15
6 6 6 6 16
7 7 7 7 17
8 8 8 8 18
9 9 9 9 19
如果要添加后缀
suffix_tup = ('a', 'b', 'c')
not_dup_cols = df.columns.difference(['column_duplicate']).tolist()
new_df = (df.loc[:, ['column_duplicate']*len(suffix_tup) +
not_dup_cols]
.set_axis(list(map(lambda suffix: f'column_duplicate_{suffix}',
suffix_tup)) +
not_dup_cols, axis=1)
)
print(new_df)
column_duplicate_a column_duplicate_b column_duplicate_c other
0 0 0 0 10
1 1 1 1 11
2 2 2 2 12
3 3 3 3 13
4 4 4 4 14
5 5 5 5 15
6 6 6 6 16
7 7 7 7 17
8 8 8 8 18
n = 3
not_dup_cols = df.columns.difference(['column_duplicate']).tolist()
new_df = (df.loc[:, ['column_duplicate']*n +
not_dup_cols]
.set_axis(list(map(lambda x: f'column_duplicate_{x}', range(n))) +
not_dup_cols, axis=1)
)
print(new_df)
column_duplicate_0 column_duplicate_1 column_duplicate_2 other
0 0 0 0 10
1 1 1 1 11
2 2 2 2 12
3 3 3 3 13
4 4 4 4 14
5 5 5 5 15
6 6 6 6 16
7 7 7 7 17
8 8 8 8 18
9 9 9 9 19
或添加索引
suffix_tup = ('a', 'b', 'c')
not_dup_cols = df.columns.difference(['column_duplicate']).tolist()
new_df = (df.loc[:, ['column_duplicate']*len(suffix_tup) +
not_dup_cols]
.set_axis(list(map(lambda suffix: f'column_duplicate_{suffix}',
suffix_tup)) +
not_dup_cols, axis=1)
)
print(new_df)
column_duplicate_a column_duplicate_b column_duplicate_c other
0 0 0 0 10
1 1 1 1 11
2 2 2 2 12
3 3 3 3 13
4 4 4 4 14
5 5 5 5 15
6 6 6 6 16
7 7 7 7 17
8 8 8 8 18
n = 3
not_dup_cols = df.columns.difference(['column_duplicate']).tolist()
new_df = (df.loc[:, ['column_duplicate']*n +
not_dup_cols]
.set_axis(list(map(lambda x: f'column_duplicate_{x}', range(n))) +
not_dup_cols, axis=1)
)
print(new_df)
column_duplicate_0 column_duplicate_1 column_duplicate_2 other
0 0 0 0 10
1 1 1 1 11
2 2 2 2 12
3 3 3 3 13
4 4 4 4 14
5 5 5 5 15
6 6 6 6 16
7 7 7 7 17
8 8 8 8 18
9 9 9 9 19
使用循环。。。。。