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

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

我想创建一个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
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

相关问题