使用pandas将数据集从宽数据集转换为长数据集的问题

ubof19bj  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(148)

考虑数据集的以下列:
ONOFF_LEVER_V0、ONOFF_LEVER_V1、LEDD_DOPA_V0__1、LEDD_DOPA_V1__1
我想把这个数据集转换成长格式的列:
访视(0或1,分别对应V0和V1)、ONOFF_LEVER、LEDD_DOPA__1
我在考虑使用pd.wide_to_long函数,但是在我的例子中后缀V0或V1并不总是在变量的末尾。有什么建议吗(这实际上是我的问题的一个最小例子,我的数据集很大)。

l3zydbqr

l3zydbqr1#

Series.str.extractSeries.str.replace一起用于MulitIndex,因此可以通过DataFrame.stack进行整形:

c='ONOFF_LEVER_V0, ONOFF_LEVER_V1, LEDD_DOPA_V0_categ_1, LEDD_DOPA_V1_categ_1'.split(', ')
df = pd.DataFrame(1, columns=c, index=[0,1])

df.columns = [df.columns.str.extract('_(V0|V1)', expand=False), 
              df.columns.str.replace('_(V0|V1)', '', regex=True)]

df = df.stack(0).droplevel(0).rename_axis('visit').reset_index()
print (df)
  visit  LEDD_DOPA_categ_1  ONOFF_LEVER
0    V0                  1            1
1    V1                  1            1
2    V0                  1            1
3    V1                  1            1

相关问题