2016-04-23 72 views
2
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) 

产生熊猫GROUPBY排序上多指标

一个

不过,我希望


一个

如何获得第二个结果?

+0

我不知道中不需要的排序这份报告是否涉及:https://github.com/pydata /熊猫/问题/ 4588 – tfv

回答

0

可能是我评论中提到的已知问题。

也许这是一个有效的解决方法:

import pandas as pd 

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

df = pd.DataFrame(values) 

grouped = df.groupby(['C1', 'C2'], sort=False)['C3'] 

for name, group in grouped: 
    print group.iloc[0] 

结果

一个

0

考虑转型您的数据

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

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

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