将数据帧从宽转换为长 - pandas

Convert dataframe from wide to long - pandas

我有这样一个数据框:

index    S_1 S_2 S_3 S_4
 0        1    0   0   1
 1        1    1  Nan Nan

我想把它从长改成宽。例如

index num S
 0     1  1
 0     2  0
 0     3  0
 0     4  1
 1     1  1
 1     2  1
 1     3  Nan
 1     4  Nan

我已根据 答案尝试了以下代码,但出现以下错误:

matches_df.columns = matches_df.columns.str.split('_', expand=True)

TypeError: 'float' 类型的对象没有 len()

为什么我无法拆分“_”?列中还有其他信息我想保留。

pandas.wide_to_long,当列有这样的存根时,这很好。

import pandas as pd

df.reset_index(inplace=True,drop=True)
df['id'] = df.index
df = pd.wide_to_long(df, stubnames='S_', i='id', j='num').reset_index().rename(columns={'S_':'S'})

#  id num  index    S
#0   0   1      0  1.0
#1   1   1      1  1.0
#2   0   2      0  0.0
#3   1   2      1  1.0
#4   0   3      0  0.0
#5   1   3      1  NaN
#6   0   4      0  1.0
#7   1   4      1  NaN