有没有一种方法可以将数据框折叠成带有相关列的一行
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
这是我的数据框:
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