将字典转换为数据框,然后将列熔化/堆叠为行

Converting dictionary to dataframe, and then melting / stacking columns to rows

我对如何正确使用 meltstack 来转换我的数据框有点困惑。

目前有一个如下所示的数据框:

我的 objective 是要转换此数据框(可能使用 meltstack),但我在这样做时遇到了一些麻烦。我的 objective 是让我的数据框看起来像这样:

我的数据目前存储在 dict :

{'K_T1': [84.51865079365093,
  84.51865079365093,
  83.80912698412698,
  83.80912698412698,
  86.56468253968255,
  86.56468253968255],
 'K_T2': [77.26309523809515,
  77.26309523809515,
  77.57777777777771,
  77.57777777777771,
  77.09999999999992,
  77.09999999999992],
 'Z_T1': [83.80912698412698,
  83.80912698412698,
  86.61111111111107,
  86.61111111111107,
  87.81746031746032,
  87.81746031746032],
 'Z_T2': [77.57777777777771,
  77.57777777777771,
  75.8619047619048,
  75.8619047619048,
  74.79007936507927,
  74.79007936507927]}

伪代码:

感谢您提供的任何支持!

使用 str.split first by _ in columns, then reshape by DataFrame.stack 进行一些数据清理:

df.columns = df.columns.str.split('_', expand=True)
df = (df.stack(0)
        .sort_index(level=1)
        .rename_axis([None, 'Part Name'])
        .reset_index(level=1)
        .reset_index(drop=True))
print (df)
   Part Name         T1         T2
0          K  84.518651  77.263095
1          K  84.518651  77.263095
2          K  83.809127  77.577778
3          K  83.809127  77.577778
4          K  86.564683  77.100000
5          K  86.564683  77.100000
6          Z  83.809127  77.577778
7          Z  83.809127  77.577778
8          Z  86.611111  75.861905
9          Z  86.611111  75.861905
10         Z  87.817460  74.790079
11         Z  87.817460  74.790079

wide_to_long 的另一个想法,并在 _ 之前和之后使用更改顺序重命名列:

df.columns = [f'{b}_{a}' for a, b in df.columns.str.split('_')]

df = (pd.wide_to_long(df.reset_index(),
                      stubnames=['T1','T2'],
                      i='index',
                      j='Part Name',
                      sep='_',
                      suffix='\w+')
       .reset_index(level=1).reset_index(drop=True))
print (df)  
   Part Name         T1         T2
0          K  84.518651  77.263095
1          K  84.518651  77.263095
2          K  83.809127  77.577778
3          K  83.809127  77.577778
4          K  86.564683  77.100000
5          K  86.564683  77.100000
6          Z  83.809127  77.577778
7          Z  83.809127  77.577778
8          Z  86.611111  75.861905
9          Z  86.611111  75.861905
10         Z  87.817460  74.790079
11         Z  87.817460  74.790079