gpt4 book ai didi

python - 用两列对 pandas groupby 进行排序

转载 作者:行者123 更新时间:2023-12-01 19:31:23 24 4
gpt4 key购买 nike

我正在尝试将具有两列的数据框分组,并避免使用“sort = False”进行默认排序。但是,我无法实现这一点。

这是简化的示例

df = pd.DataFrame([
['zebra', 1, 10],
['zebra', 2, 10],
['apple', 3, 20],
['apple', 4, 20],
],
columns=['ColA','ColB','ColC'])

因此 df 是

    ColA  ColB  ColC
0 zebra 1 10
1 zebra 2 10
2 apple 3 20
3 apple 4 20

我正在使用 pandas (1.0.3) groupby 并禁用键排序

df_agg = df.groupby(by=['ColA','ColB'], sort = False)

df_agg.groups

结果

{('apple', 3): Int64Index([2], dtype='int64'),
('apple', 4): Int64Index([3], dtype='int64'),
('zebra', 1): Int64Index([0], dtype='int64'),
('zebra', 2): Int64Index([1], dtype='int64')}

与“sort = True”(默认)相同

但是,我想要的是如下

{
('zebra', 1): Int64Index([0], dtype='int64'),
('zebra', 2): Int64Index([1], dtype='int64'),
('apple', 3): Int64Index([2], dtype='int64'),
('apple', 4): Int64Index([3], dtype='int64')
}

按一列分组时“sort = False”似乎工作正常。

df_agg = df.groupby(by=['ColA'], sort = False)
df_agg.groups

结果

{'zebra': Int64Index([0, 1], dtype='int64'),
'apple': Int64Index([2, 3], dtype='int64')}

如果排序仅适用于一列而不适用于元组。我可以根据元组对组字典进行排序,但我正在使用一个需要 groupby 对象的应用程序。我感谢任何有关如何解决此问题的指示。

最佳答案

groups 属性是一个字典,不是,其中确定组的顺序。您必须通过某些操作来“解析”groupby 对象,以确定顺序是什么。

df.groupby(['ColA', 'ColB'], sort=False, as_index=False).first()

ColA ColB ColC
0 zebra 1 10
1 zebra 2 10
2 apple 3 20
3 apple 4 20

对比

df.groupby(['ColA', 'ColB'], as_index=False).first()

ColA ColB ColC
0 apple 3 20
1 apple 4 20
2 zebra 1 10
3 zebra 2 10

实际要查看的地方是 groupby 对象的 ngroup 方法

g1 = df.groupby(['ColA', 'ColB'], sort=False, as_index=False)
g1.ngroup()

0 0
1 1
2 2
3 3
dtype: int64

对比

g2 = df.groupby(['ColA', 'ColB'], as_index=False)
g2.ngroup()

0 2
1 3
2 0
3 1
dtype: int64

关于python - 用两列对 pandas groupby 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61332326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com