熊猫将多键值数据框列重塑为行

时间:2019-08-14 11:53:21

标签: python pandas reshape

我有一个数据框,例如: enter image description here

如何重整列(0 => 1、2 => 3)作为记录存储? 即列Serializer.GetProto<T>()metric_name以及多行(观察)?

metric_value

2 个答案:

答案 0 :(得分:1)

如果只有4列,则可以展平值并通过构造函数创建DataFrame:

a = df[[0, 2]].values.ravel()
b = df[[1, 3]].values.ravel()

df = pd.DataFrame({'A':a, 'B':b})
print (df)
                      A                 B
0                Model:             Logit
1     Pseudo R-squared:               inf
2   Dependent Variable:   sick_percentage
3                  AIC:            6.0798
4                 Date:  2019-08-14 13:32
5                  BIC:           10.0764
6     No. Observations:                28
7       Log-Likelihood:         -0.039902
8             Df Model:                 2
9              LL-Null:            0.0000
10        Df Residuals:                25
11         LLR p-value:            1.0000
12           Converged:            0.0000
13               Scale:            1.0000
14      No. Iterations:           35.0000
15                                       

一般解决方案-在具有模和整数除法的列中创建MultiIndex,并通过DataFrame.stack进行整形:

df.columns = [df.columns % 2, df.columns // 2]
df = df.stack().reset_index(drop=True)
print (df)
                      0                 1
0                Model:             Logit
1     Pseudo R-squared:               inf
2   Dependent Variable:   sick_percentage
3                  AIC:            6.0798
4                 Date:  2019-08-14 13:32
5                  BIC:           10.0764
6     No. Observations:                28
7       Log-Likelihood:         -0.039902
8             Df Model:                 2
9              LL-Null:            0.0000
10        Df Residuals:                25
11         LLR p-value:            1.0000
12           Converged:            0.0000
13               Scale:            1.0000
14      No. Iterations:           35.0000
15                                       

答案 1 :(得分:0)

如果您正在寻找更快的解决方案,也可以在此处使用np.concatenate

df=pd.DataFrame(np.concatenate( (df.iloc[:,[0,1]].values, df.iloc[:,[2,3]].values), axis=0 ),columns=['Metric Name','Metric Value'])

如果要使用熊猫功能,可以使用

1)pandas.DataFrame.merge

df= df.iloc[:,[0,1]].rename(columns={0:'Metric Name',1:'Metric Value'}).merge(df.iloc[:,[2,3]].rename(columns={2:'Metric Name',3:'Metric Value'}),how='outer')

2)pandas.concat

df=pd.concat((df.iloc[:,[0,1]].rename(columns={0:'Metric Name',1:'Metric Value'}),df.iloc[:,[2,3]].rename(columns={2:'Metric Name',3:'Metric Value'})), ignore_index=True)