从字典创建一个数据帧,键和值都是行

2024-10-03 21:28:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

字典:

patients = ['Patient01', 'patient02', 'patient03']
visits = [1,2,3]
dictionary = {k:visits for k in patients}

输出:

^{pr2}$

我试过了

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

但结果是

            0   1   2
patient02   1   2   3
patient03   1   2   3
patient01   1   2   3

我想要的是这样:

          visit_num
patient01  1
patient01  2
patient01  3
patient02  1
patient02  2
patient02  3
patient03  1
patient03  2
patient03  3

Tags: 数据in患者idfordictionary字典pd
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')

在您创建的数据帧上使用^{}

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

说明说明

df.stack完成了这里的大部分工作,使用了您的原始df

^{pr2}$

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

Patient01  0    1
           1    2
           2    3
patient02  0    1
           1    2
           2    3
patient03  0    1
           1    2
           2    3

行的其余部分(.reset_index().to_frame())只是为了将其转换成一个好的数据帧格式。在

使用^{}

df = pd.DataFrame.from_dict(dictionary, orient = 'index')
df.reset_index()\
  .melt('index',value_name='visit_num')\
  .drop('variable', axis=1)\
  .sort_values('index') #if you wish to get your order

输出:

^{pr2}$

相关问题 更多 >