2016-04-23 111 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