我想创建一个dataframe,其中的列是一周中的几天,以及每个人的姓名和相应的开始/结束时间。到目前为止,我可以从字典中获取数据到 Dataframe ,但我正在努力获得正确的索引。我设法从python这个问题中得到了一些帮助-如何将嵌套字典加载到pandas dataframe?中,但我不确定如何重新设置索引的范围以实现我所需要的。
我知道我需要 .drop
这个 Times
整个专栏,但在那之后,我就没有什么想法了。我在想是怎么回事 row[0]
作为索引,但我不确定这是否是最好的方法。
以下是我迄今为止的工作成果:
数据:
employees = {"Mon":{
"Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
"Start":{"0":"9a","1":"9a","2":"3p","3":"3p"},
"End":{"0":"5p","1":"5p","2":"11p","3":"11p"},
},
"Tues":{
"Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
"Start":{"0":"9a","1":"9a","2":"3p","3":"3p"},
"End":{"0":"5p","1":"5p","2":"11p","3":"11p"},
}
}
创建 Dataframe 的代码:
dict_df = pd.DataFrame.from_dict({(i,j): employees[i][j]
for i in employees.keys()
for j in employees[i].keys()}, orient='index').reset_index().rename(
{'level_0': 'Day', 'level_1': 'Name'}, axis=1)
电流输出:
Day Name 0 1 2 3
0 Mon Name John Nick Ali Joseph
1 Mon Start 9a 9a 3p 3p
2 Mon End 5p 5p 11p 11p
3 Tues Name John Nick Ali Joseph
4 Tues Start 9a 9a 3p 3p
5 Tues End 5p 5p 11p 11p
所需输出:
Days Times John Nick Ali Joseph
0 Mon Start 9a 9a 3p 3p
1 Mon End 5p 5p 11p 11p
2 Tues Start 9a 9a 3p 3p
3 Tues End 5p 5p 11p 11p
1条答案
按热度按时间4dc9hkyq1#
没有一列等效于
set_index
,因此您可以从每个子字典创建一个 Dataframe ,然后转置和concat
他们最终走到了一起。然后,可以将该键指定为日值。最后如果你想要一个多重索引
.set_index(['Days', 'Times'])
```import pandas as pd
df = pd.concat([(pd.DataFrame(d).set_index('Name').T
.rename_axis(index='Times', columns=None)
.reset_index()
.assign(Days=day))
for day,d in employees.items()], ignore_index=True)
print(df)
Times John Nick Ali Joseph Days
0 Start 9a 9a 3p 3p Mon
1 End 5p 5p 11p 11p Mon
2 Start 9a 9a 3p 3p Tues
3 End 5p 5p 11p 11p Tues