有没有一种方法可以将数据框折叠成带有相关列的一行

Is there a way I can collapse the data frame into ONE row with associated columns

这是我的数据框:

    col1   col2     col3    
 0  data1   1        11
 1  data2   2        22
 2  data3   3        33

我想把它改造成这样的形式:

     data1_col2     data1_col3    data2_col2    data2_col3    data3_col2...  
 0        1             11             2             22            3

如果这个答案有解决方案..这种操作的术语是什么?

你可以试试这个:

import numpy as np 
import pandas as pd 

data = {"cols" : ["r1", "r2", "r3", "r4"], "X" : [1, 2, 3, 4], "Y" : [1, 22, 33, 44]}

df = pd.DataFrame(data=data)
print(df)

new_cols = [i + '_' + str(j) for i in df.cols for j in df.columns[1:]]
print(new_cols)

new_data = df.iloc[:, 1:].values.flatten()

df2 = pd.DataFrame(columns=new_cols)
df2.loc[0] = new_data
print(df2)

这使得 df 为:

  cols  X   Y
0   r1  1   1
1   r2  2  22
2   r3  3  33
3   r4  4  44

new_cols作为

['r1_X', 'r1_Y', 'r2_X', 'r2_Y', 'r3_X', 'r3_Y', 'r4_X', 'r4_Y'],

df2作为

   r1_X  r1_Y  r2_X  r2_Y  r3_X  r3_Y  r4_X  r4_Y
0     1     1     2    22     3    33     4    44

你可以这样做:

s = df.set_index('col1').stack()
out = pd.DataFrame({x[0]+'_'+x[1] : [s[x]] for x in s.index})

输出:

    data1_col2  data1_col3  data2_col2  data2_col3  data3_col2  data3_col3
0            1          11           2          22           3          33