当前位置: 代码迷 >> python >> 从列名的第一部分修改采用索引的数据框
  详细解决方案

从列名的第一部分修改采用索引的数据框

热度:74   发布时间:2023-07-16 11:16:05.0

我需要您的帮助来修改以下数据框

df = pd.DataFrame(data=[[1,1,2,3,4],[2,3,4,5,6],[3,4,5,6,7]],
                  columns=['day','Sub_1_var1','Sub_1_var2','Sub_2_var1','Sub_2_var2'])

df
Out[45]: 
   day  Sub_1_var1  Sub_1_var2  Sub_2_var1  Sub_2_var2
0    1           1           2           3           4
1    2           3           4           5           6
2    3           4           5           6           7

进入df2

df2 = pd.DataFrame(data=[[1,1,2],[2,3,4],[3,4,5],
                         [1,3,4],[2,5,6],[3,6,7]],
                        columns=['day','var1','var2'],
                        index=['Sub_1','Sub_1','Sub_1','Sub_2','Sub_2','Sub_2'])

df2
Out[46]: 
       day  var1  var2
Sub_1    1     1     2
Sub_1    2     3     4
Sub_1    3     4     5
Sub_2    1     3     4
Sub_2    2     5     6
Sub_2    3     6     7

采用:

  • 按列day
  • 通过按最后_列进行并创建Multiindex
  • 通过重塑
  • 和最后的

df = df.set_index('day')
df.columns = df.columns.str.rsplit('_', n=1, expand=True)
df = df.stack(0).sort_index(level=[1,0]).reset_index(level=0)
print (df)
       day  var1  var2
Sub_1    1     1     2
Sub_1    2     3     4
Sub_1    3     4     5
Sub_2    1     3     4
Sub_2    2     5     6
Sub_2    3     6     7

df.index = df.index.str[4:]
print (df)
   day  var1  var2
1    1     1     2
1    2     3     4
1    3     4     5
2    1     3     4
2    2     5     6
2    3     6     7
  相关解决方案