首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫DataFrame表内堆叠子表

熊猫DataFrame表内堆叠子表
EN

Stack Overflow用户
提问于 2018-07-20 21:13:09
回答 1查看 3K关注 0票数 3

假设我有来自数据库的以下输入数据。

代码语言:javascript
复制
    data = [{'abc': 'None',
          'cde': 4,
          'efg': 1,
          'blah': {'k': 23,
                   'y': 26,
                   'u':48}
          },{'abc': 'hdf',
          'cde':10,
          'efg': 2,
          'blah': {'k': 244,
                   'y': 747,
                   'u':75,
                   'g':88},
        },
]

以下是我想制作的熊猫数据框架的外观:

代码语言:javascript
复制
                       blah
       cde  abc    g    k    u   y
efg 1   4  'None'  N/A  23   48  26
    2   10 'hdf'   88   244  75  747

主要特点:

  • “‘efg”是垂直合并的,并充当索引(我认为,如果我错了,请纠正我)
  • 像“cde”、“abc”这样的平面特性被视为普通列。
  • 嵌套dict的父元素叠加在其各自的子元素之上,任何没有与索引关联的值的嵌套字段,“efg”都得到N/A。

尝试:当我将数据放入熊猫数据框架中时,我会得到以下信息:

代码语言:javascript
复制
 abc  cde  efg  blah
k  None    4    1    23
u  None    4    1    48
y  None    4    1    26
g   hdf   10    2    88
k   hdf   10    2   244
u   hdf   10    2    75
y   hdf   10    2   747     

我怀疑熊猫正在将嵌套的切分键作为索引,因此我重新设置它,给出如下内容:

代码语言:javascript
复制
index   abc  cde  efg  blah
0     k  None    4    1    23
1     u  None    4    1    48
2     y  None    4    1    26
3     g   hdf   10    2    88
4     k   hdf   10    2   244
5     u   hdf   10    2    75
6     y   hdf   10    2   747

所以我按熊猫提供的“索引”列来旋转这张表,我希望它有一个堆叠的交叉选项卡,其中'blah‘的父母是最上面的条目,子列是它的嵌套分词('k','u','y','g')。此外,我希望其他列保持完整,只有'blah‘部分合并了单元格。但是,我们得到的结果是:

代码语言:javascript
复制
>>> t_pivot = t_concat.pivot_table(columns='index')

>>> t_pivot

index     g      k     u      y
blah   88.0  133.5  61.5  386.5
cde    10.0    7.0   7.0    7.0
efg     2.0    1.5   1.5    1.5

好吧,不是很好,所以也许我需要明确说明我们应该通过以下方式来索引哪些数据:

代码语言:javascript
复制
t_pivot = t_concat.pivot_table(index = 'efg',columns=['index', 'cde'])

>>> t_pivot

       blah                                      
index     g     k            u           y       
cde      10    4      10    4     10    4      10
efg                                              
1       NaN  23.0    NaN  48.0   NaN  26.0    NaN
2      88.0   NaN  244.0   NaN  75.0   NaN  747.0

还是不对。

那么,对于如何使用嵌套dict从dict生成数据框架,有什么想法吗?主要是使单元格为父母及其相应的子元素正确地合并。最终结果将进入html文档。

其他我尝试过的事情:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 21:58:51

代码语言:javascript
复制
df = pd.DataFrame(data).set_index('efg')
sub_df = df.blah.apply(pd.Series)
sub_df = pd.concat({'blah': sub_df}, axis=1, names=['l1', 'l2'])
df = pd.concat({'': df}, axis=1, names=['l1', 'l2'])
df = pd.concat((df, sub_df), axis=1)
df = df.drop(('', 'blah'), axis=1)
print df

l1             blah                    
l2    abc cde     g      k     u      y
efg                                    
1    None  4  NaN    23.0   48.0  26.0 
2    hdf   10  88.0  244.0  75.0  747.0

分层列解决方案是基于this answer的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51450442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档