【发布时间】:2019-08-24 23:58:35
【问题描述】:
我有一个 DataFrame,我想用几列 groupby。我知道之后如何聚合数据,或者查看每个索引元组。但是,我不确定将每个组的“组号”附加到原始数据框的列中的最佳方法:
例如,我有一个数据框 df,有两个索引(a_id 和 b_id),我想将它们用于使用 groupby 对 df 进行分组。
import pandas as pd
a = pd.DataFrame({'a_id':['q','q','q','q','q','r','r','r','r','r'],
'b_id':['m','m','j','j','j','g','g','f','f','f'],
'val': [1,2,3,4,5,6,7,8,9,8]})
# Output:
a_id b_id val
0 q m 1
1 q m 2
2 q j 3
3 q j 4
4 q j 5
5 r g 6
6 r g 7
7 r f 8
8 r f 9
9 r f 8
当我进行 groupby 时,我不想聚合所有内容,我只想添加一个列 group_id,其中包含一个表示组的整数。但是,我不确定是否有一种简单的方法可以做到这一点。我当前的解决方案包括反转 GroupBy.indices 字典,将其转换为系列,并将其附加到数据框中,如下所示:
gb = a.groupby(['a_id','b_id'])
dict_g = dict(enumerate(gb.indices.values()))
dict_g_reversed = {x:k for k,v in dict_g.items() for x in v}
group_ids = pd.Series(dict_g_reversed)
a['group_id'] = group_ids
尽管group_id 索引的顺序不正确,但这给了我想要的东西。这似乎应该是一个简单的功能,但我不确定为什么它似乎不是。例如,我知道在 MATLAB 中,他们有一个 findgroups,它完全符合我的要求。到目前为止,我还没有在 pandas 中找到等价物。如何使用 pd DataFrame 完成此操作?
【问题讨论】:
-
你能提供你预期输出的 sn-p 吗?
标签: python python-3.x pandas dataframe pandas-groupby