从字典创建数据框,键和值都是行

Kar*_*Liu 3 python dictionary pandas

我有一个字典,其中键是患者ID,并且所有键的值都相同:[1,2,3],表示每位患者将访问诊所3次.如何将其转换为数据框,其中键和值都是行?

字典:

patients = ['Patient01', 'patient02', 'patient03']
visits = [1,2,3]
dictionary = {k:visits for k in patients}
Run Code Online (Sandbox Code Playgroud)

输出:

{'Patient01': [1, 2, 3],
 'patient02': [1, 2, 3],
 'patient03': [1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)

我试过了

pd.DataFrame.from_dict(dictionary, orient = 'index')
Run Code Online (Sandbox Code Playgroud)

但输出是

            0   1   2
patient02   1   2   3
patient03   1   2   3
patient01   1   2   3
Run Code Online (Sandbox Code Playgroud)

而我想要的是这样的:

          visit_num
patient01  1
patient01  2
patient01  3
patient02  1
patient02  2
patient02  3
patient03  1
patient03  2
patient03  3
Run Code Online (Sandbox Code Playgroud)

sac*_*cuL 6

pd.stack()在您创建的数据框架上使用:

df = pd.DataFrame.from_dict(dictionary, orient = 'index')

new_df = df.stack().reset_index(level=1, drop=True).to_frame(name='visit_num')

>>> new_df
           visit num
Patient01          1
Patient01          2
Patient01          3
patient02          1
patient02          2
patient02          3
patient03          1
patient03          2
patient03          3
Run Code Online (Sandbox Code Playgroud)

解释说明:

df.stack 做大部分工作,拿走你的原创作品 df

           0  1  2
Patient01  1  2  3
patient02  1  2  3
patient03  1  2  3
Run Code Online (Sandbox Code Playgroud)

并将其转换为以下多索引pandas.Series:

Patient01  0    1
           1    2
           2    3
patient02  0    1
           1    2
           2    3
patient03  0    1
           1    2
           2    3
Run Code Online (Sandbox Code Playgroud)

该行的其余部分(.reset_index().to_frame())就是将其转换为一种漂亮的数据帧格式.


Ale*_*all 3

data = [[patient, visit_num]
        for patient, visits in dictionary.items()
        for visit_num in visits]
df = pd.DataFrame(data, columns=['patient', 'visit_num']).set_index('patient')
Run Code Online (Sandbox Code Playgroud)