pandas 如何将python字典中的元组转换为panda Dataframe ?

d4so4syb  于 2022-11-27  发布在  Python
关注(0)|答案(2)|浏览(235)

我有一个python字典,其中字典的键是两个字符串的元组,值是整数。
它看起来像这样:

mydic = { ('column1', 'index1'):33, 
          ('column1', 'index2'):34, 
          ('column2', 'index1'):35, 
          ('column2', 'index2'):36 }

元组的第一个字符串应用作dataframe中的column-name,元组中的第二个字符串应用作索引。
Dataframe 应如下所示:
| (索引)|栏1|第2栏|
| - -| - -| - -|
| 索引1|三十三人|三十五|
| 索引2|三十四|三十六|
有没有办法做到这一点?
(Or我是否必须循环遍历字典的所有元素并手动构建 Dataframe ,一次构建一个值?)

70gysomp

70gysomp1#

首先构建一个pd.Series(它将有一个MultiIndex),然后使用pd.Series.unstack获取列名。
第一个

xqkwcwgp

xqkwcwgp2#

您可以使用pd.MultiIndex.from_tuples

mydic = { ('column1', 'index1'):33, 
          ('column1', 'index2'):34, 
          ('column2', 'index1'):35, 
          ('column2', 'index2'):36 }

df = pd.DataFrame(mydic.values(), index = pd.MultiIndex.from_tuples(mydic))

                 0
column1 index1  33
        index2  34
column2 index1  35
        index2  36

接下来的只是一个变通办法。

df.T.stack()

          column1  column2
0 index1       33       35
  index2       34       36

请注意,索引包含两行。不要忘记重置它。

df.T.stack().reset_index().drop('level_0', axis = 1)

  level_1  column1  column2
0  index1       33       35
1  index2       34       36

如果你愿意的话,你可以重命名level_1。希望这对你有帮助。

相关问题