如何使用字典字典创建dataframe和设置索引?

2cmtqfgy  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(661)

我想创建一个dataframe,其中的列是一周中的几天,以及每个人的姓名和相应的开始/结束时间。到目前为止,我可以从字典中获取数据到 Dataframe ,但我正在努力获得正确的索引。我设法从python这个问题中得到了一些帮助-如何将嵌套字典加载到pandas dataframe?中,但我不确定如何重新设置索引的范围以实现我所需要的。
我知道我需要 .drop 这个 Times 整个专栏,但在那之后,我就没有什么想法了。我在想是怎么回事 row[0] 作为索引,但我不确定这是否是最好的方法。
以下是我迄今为止的工作成果:
数据:

  1. employees = {"Mon":{
  2. "Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
  3. "Start":{"0":"9a","1":"9a","2":"3p","3":"3p"},
  4. "End":{"0":"5p","1":"5p","2":"11p","3":"11p"},
  5. },
  6. "Tues":{
  7. "Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
  8. "Start":{"0":"9a","1":"9a","2":"3p","3":"3p"},
  9. "End":{"0":"5p","1":"5p","2":"11p","3":"11p"},
  10. }
  11. }

创建 Dataframe 的代码:

  1. dict_df = pd.DataFrame.from_dict({(i,j): employees[i][j]
  2. for i in employees.keys()
  3. for j in employees[i].keys()}, orient='index').reset_index().rename(
  4. {'level_0': 'Day', 'level_1': 'Name'}, axis=1)

电流输出:

  1. Day Name 0 1 2 3
  2. 0 Mon Name John Nick Ali Joseph
  3. 1 Mon Start 9a 9a 3p 3p
  4. 2 Mon End 5p 5p 11p 11p
  5. 3 Tues Name John Nick Ali Joseph
  6. 4 Tues Start 9a 9a 3p 3p
  7. 5 Tues End 5p 5p 11p 11p

所需输出:

  1. Days Times John Nick Ali Joseph
  2. 0 Mon Start 9a 9a 3p 3p
  3. 1 Mon End 5p 5p 11p 11p
  4. 2 Tues Start 9a 9a 3p 3p
  5. 3 Tues End 5p 5p 11p 11p
4dc9hkyq

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

展开查看全部

相关问题