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)
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()
)就是将其转换为一种漂亮的数据帧格式.
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)
归档时间: |
|
查看次数: |
2960 次 |
最近记录: |