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

4

我有一个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 数据框按 version 标签中的 major 键分组。

我尝试了几种不同的方法,从将字典键传递给数据框 groupby 函数 `df.groupby(['version']['major'])`,但这并不起作用,因为 major 不是数据框标签的一部分,到将 version 分配给数据框索引,但目前仍然没有解决。我还尝试将字典展开为数据框本身的附加列,但这似乎有自己的问题。

有什么想法吗?

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

2个回答

4

Option 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()

在此输入图片描述

选项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


我喜欢你的版本。 - MaxU - stand with Ukraine
太好了!我没想到apply函数可以作为索引选择器来使用数据框。谢谢,@piRSquared! - RexIncognito
我不理解你的问题。请考虑提出一个新的问题。 - piRSquared

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

1
我以前从未见过 assign。今天我学到了新东西。 - piRSquared
是啊,如果用assign就可以避免很多concatmerge的操作了。 - RexIncognito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接