通过嵌套字典键对pandas数据帧进行分组

时间:2016-08-10 19:08:41

标签: python pandas dictionary dataframe

我有一个pandas数据框,其中一列是字典类型。这是一个示例数据帧:

import pandas as pd
df = pd.DataFrame({'a': [1,2,3], 
                   'b': [4,5,6], 
                   'version': [{'major': 7, 'minor':1}, 
                               {'major':8, 'minor': 5},
                               {'major':7, 'minor':2}] })

DF:

   a  b                   version
0  1  4  {'minor': 1, 'major': 7}
1  2  5  {'minor': 5, 'major': 8}
2  3  6  {'minor': 2, 'major': 7}

我正在寻找一种通过该字典键之一对数据帧进行分组的方法;在这种情况下,通过版本标签中的主要键对 df 数据框进行分组。

我尝试了一些不同的东西,从将字典键传递给dataframe groupby函数,`df.groupby(['version'] ['major']),这是因为 major 不是数据框标签的一部分,将版本分配给数据框索引,但到目前为止没有任何作用。我也试图将字典作为数据框本身的附加列来展平,但这似乎有其自身的问题。

有什么想法吗?

P.S。抱歉格式化,这是我的第一个stackoverflow问题。

2 个答案:

答案 0 :(得分:4)

选项1

df.groupby(df.version.apply(lambda x: x['major'])).size()

version
7    2
8    1
dtype: int64
df.groupby(df.version.apply(lambda x: x['major']))[['a', 'b']].sum()

enter image description here

选项2

df.groupby(df.version.apply(pd.Series).major).size()

major
7    2
8    1
dtype: int64
df.groupby(df.version.apply(pd.Series).major)[['a', 'b']].sum()

enter image description here

答案 1 :(得分:2)

你可以这样做:

In [15]: df.assign(major=df.version.apply(pd.Series).major).groupby('major').sum()
Out[15]:
       a   b
major
7      4  10
8      2   5