考虑数据集的以下列: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并不总是在变量的末尾。有什么建议吗(这实际上是我的问题的一个最小例子,我的数据集很大)。
l3zydbqr1#
将Series.str.extract与Series.str.replace一起用于MulitIndex,因此可以通过DataFrame.stack进行整形:
Series.str.extract
Series.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
1条答案
按热度按时间l3zydbqr1#
将
Series.str.extract
与Series.str.replace
一起用于MulitIndex
,因此可以通过DataFrame.stack
进行整形: