我有一个多索引的DataFrame,我需要插入一个新列,该列的数据量与0级索引相同。
详细信息和示例: 1-每个患者有一个周期元素。 2-每个患者的笔记数量各不相同,因此我无法在每个周期元素上重复固定n_次。 3-我需要所有数据都在同一数据帧中。
我希望该示例能够提供足够的清晰度
patient note_number info
1 1 bla
1 2 bla
1 3 bla
2 4 bla
2 5 bla
3 6 bla
3 7 bla
period (each for one particular patient)
5 days
3 days
11 days
I have this multiindexed dataframe:
patient note_number info
1 1 bla
2 bla
3 bla
2 4 bla
5 bla
3 6 bla
7 bla
I need something like:
patient period note_number info
1 5 days 1 bla
2 bla
3 bla
2 3 days 4 bla
5 bla
3 11 days 6 bla
7 bla
如何完成类似的任务?需要对应。第一个周期元素必须与第一个患者配对,依此类推。 谢谢
答案 0 :(得分:1)
如果period
中的值数量与patient
中df1
的唯一值相同,则可以使用:
idx = df.index.get_level_values(0)
df2.index = idx.unique()
print (df2)
period
patient
1 5 days
2 3 days
3 11 days
df = (df.assign(period = idx.map(df2['period']))
.set_index('period', append=True)
.reorder_levels([0,2,1]))
print (df)
info
patient period note_number
1 5 days 1 bla
2 bla
3 bla
2 3 days 4 bla
5 bla
3 11 days 6 bla
7 bla
答案 1 :(得分:1)
first need to reset the index, assuming df is your dataframe, below will work
df = df.reset_index(drop=False)
使用字典为每个患者创建一个映射
my_dict = {1:'5 days',2:'3 days',3:'11 days'}
df['period'] = df['patient'].map(my_dict)
重置索引
df = df.set_index(['patient','period','note_number'])