pandas wide_long vs(堆叠和融合),用于数据帧转换

问题描述 投票:0回答:1

我有一个如下所示的数据框

df = pd.DataFrame({
'subject_ID':[1,2,3,4,5],
'date_visit':['1/1/2020','3/3/2200','13/11/2100','24/05/2198','30/03/2071'],
'a11fever':['Yes','No','Yes','Yes','No'],
'a12diagage':[36,34,42,40,np.nan],
'a12diagyr':[2021,3213,2091,4567,8901],
'a12diagyrago':[6,np.nan,9,np.nan,np.nan]})

我想对数据框进行变换,其中一个主题的样本输出如下所示

enter image description here

尽管我可以使用pd.meltstack成功完成此操作,但是使用wide_long无法做到相同。

pd.melt(df, id_vars =['subject_ID','date_visit'], value_vars =['a11fever', 'a12diagage', 'a12diagyr','a12diagyrago'])  # works fine

pd.wide_to_long(df, stubnames=['measurement', 'val'],i=(['subject_ID','date_visit']), j='grp').sort_index(level=0) # returns 0 records

df.set_index(['subject_ID','date_visit']).stack().reset_index() #works fine

我还有一个问题,

a)我们是否总是必须提及我们要在value_varspd.melt部分下转换的所有列名称。我的真实数据将超过120列。所以我必须在这里提到所有这些吗?

您能帮我吗?

python python-3.x pandas dataframe melt
1个回答
1
投票

我们总是必须在pd.melt的value_vars部分下提及我们要转换的所有列名称。我的真实数据将超过120列。所以我必须在这里提到所有这些吗?

否,不是必须的,如果省略参数value_vars,那么所有列都将用于而不是id_vars

df = pd.melt(df, id_vars =['subject_ID','date_visit'])
print (df)

    subject_ID  date_visit      variable value
0            1    1/1/2020      a11fever   Yes
1            2    3/3/2200      a11fever    No
2            3  13/11/2100      a11fever   Yes
3            4  24/05/2198      a11fever   Yes
4            5  30/03/2071      a11fever    No
5            1    1/1/2020    a12diagage    36
6            2    3/3/2200    a12diagage    34
7            3  13/11/2100    a12diagage    42
8            4  24/05/2198    a12diagage    40
9            5  30/03/2071    a12diagage   NaN
10           1    1/1/2020     a12diagyr  2021
11           2    3/3/2200     a12diagyr  3213
12           3  13/11/2100     a12diagyr  2091
13           4  24/05/2198     a12diagyr  4567
14           5  30/03/2071     a12diagyr  8901
15           1    1/1/2020  a12diagyrago     6
16           2    3/3/2200  a12diagyrago   NaN
17           3  13/11/2100  a12diagyrago     9
18           4  24/05/2198  a12diagyrago   NaN
19           5  30/03/2071  a12diagyrago   NaN
© www.soinside.com 2019 - 2024. All rights reserved.