Pandas groupby 对多索引进行排序 [英] Pandas groupby sort on multiindex

查看:159
本文介绍了Pandas groupby 对多索引进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将pandas导入为pd值 = {'C1': ['B', 'A'],'C2': ['B', 'A'],'C3': ['B', 'A'],}df = pd.DataFrame(values)df.set_index(keys=['C1', 'C2'], inplace=True)分组 = df.groupby(level='C1', sort=False)对于名称,分组分组:打印(名称)

收益

<块引用>

A

但是,我希望

<块引用>


一个

如何获得第二个结果?

解决方案

考虑重组数据

除非您的真实数据要求您重置为MultiIndex,否则在执行groupby()之前似乎没有必要重新索引.>

如果你 groupby C1 只有你得到你想要的示例输出:

将pandas导入为pd值 = {'C1': ['B', 'A'],'C2': ['B', 'A'],'C3': ['B', 'A'],}df = pd.DataFrame(values)打印原始数据帧"打印文件打印df2 = df.set_index(keys=['C1', 'C2'], inplace=False)打印重新索引的数据帧"打印df2打印grouped = df.groupby(['C1'], sort=False)grouped2 = df2.groupby(level='C1', sort=False)打印原始组"打印 grouped.groups打印打印重新索引组"打印 grouped2.groups打印打印循环输出的原始组"对于名称,分组分组:打印(名称)打印打印为循环输出重新索引组"对于名称,grouped2 中的组:打印(名称)

<小时>

原始数据帧C1 C2 C30 B B B1 A A A重新索引的数据帧C3C1 C2乙乙乙阿阿阿原始组{'A':[1],'B':[0]}重新索引组{'A': [('A', 'A')], 'B': [('B', 'B')]}循环输出的原始组乙一种循环输出的重新索引组一种乙

import pandas as pd

values = {'C1': ['B', 'A'],
          'C2': ['B', 'A'],
          'C3': ['B', 'A'],   
          }          

df = pd.DataFrame(values)
df.set_index(keys=['C1', 'C2'], inplace=True)

grouped = df.groupby(level='C1', sort=False)

for name, group in grouped:
    print(name)

yields

A
B

However, I would expect

B
A

How do I get the second result?

解决方案

Consider restructuring your data

Unless your real data requires you to reset to a MultiIndex, it seems unnecessary to reindex before doing a groupby().

If you groupby C1 only you get your desired example output:

import pandas as pd

values = {'C1': ['B', 'A'],
          'C2': ['B', 'A'],
          'C3': ['B', 'A'],   
          }          

df = pd.DataFrame(values)

print 'Original DataFrame'
print df
print

df2 = df.set_index(keys=['C1', 'C2'], inplace=False)

print 'Reindexed DataFrame'
print df2
print

grouped = df.groupby(['C1'], sort=False)
grouped2 = df2.groupby(level='C1', sort=False)

print 'Original Groups'
print grouped.groups
print

print 'Reindexed Groups'
print grouped2.groups
print

print 'Original Group for loop output'
for name, group in grouped:
    print(name)

print
print 'Reindexed Group for loop output'
for name, group in grouped2:
    print(name)


Original DataFrame
  C1 C2 C3
0  B  B  B
1  A  A  A

Reindexed DataFrame
      C3
C1 C2   
B  B   B
A  A   A

Original Groups
{'A': [1], 'B': [0]}

Reindexed Groups
{'A': [('A', 'A')], 'B': [('B', 'B')]}

Original Group for loop output
B
A

Reindexed Group for loop output
A
B

这篇关于Pandas groupby 对多索引进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆