我正在尝试将数据框与两列分组,并避免使用“sort = False”进行默认排序。但是,我无法实现这一目标。
这是简化的示例
df = pd.DataFrame([
['zebra', 1, 10],
['zebra', 2, 10],
['apple', 3, 20],
['apple', 4, 20],
],
columns=['ColA','ColB','ColC'])
Run Code Online (Sandbox Code Playgroud)
因此 df 是
ColA ColB ColC
0 zebra 1 10
1 zebra 2 10
2 apple 3 20
3 apple 4 20
Run Code Online (Sandbox Code Playgroud)
我正在使用 pandas (1.0.3) groupby 并禁用键排序
df_agg = df.groupby(by=['ColA','ColB'], sort = False)
df_agg.groups
Run Code Online (Sandbox Code Playgroud)
结果是
{('apple', 3): Int64Index([2], dtype='int64'),
('apple', 4): Int64Index([3], dtype='int64'),
('zebra', 1): Int64Index([0], dtype='int64'),
('zebra', 2): Int64Index([1], dtype='int64')}
Run Code Online (Sandbox Code Playgroud)
与“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')
}
Run Code Online (Sandbox Code Playgroud)
按一列分组时“sort = False”似乎工作正常。
df_agg = df.groupby(by=['ColA'], sort = False)
df_agg.groups
Run Code Online (Sandbox Code Playgroud)
结果是
{'zebra': Int64Index([0, 1], dtype='int64'),
'apple': Int64Index([2, 3], dtype='int64')}
Run Code Online (Sandbox Code Playgroud)
如果排序仅适用于一列而不适用于元组。我可以根据元组对组字典进行排序,但我正在使用一个需要 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
Run Code Online (Sandbox Code Playgroud)
相对
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
Run Code Online (Sandbox Code Playgroud)
实际要查看的地方是groupby对象的ngroup方法
g1 = df.groupby(['ColA', 'ColB'], sort=False, as_index=False)
g1.ngroup()
0 0
1 1
2 2
3 3
dtype: int64
Run Code Online (Sandbox Code Playgroud)
相对
g2 = df.groupby(['ColA', 'ColB'], as_index=False)
g2.ngroup()
0 2
1 3
2 0
3 1
dtype: int64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |