基于多索引的Pandas groupby排序

2024-03-28 19:54:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

收益率

A
B

不过,我希望

B
A

如何得到第二个结果?在


Tags: nameimportdataframepandasdfindexaskeys
2条回答

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

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

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]

结果

B

A

考虑重组数据

除非您的数据要求您重置为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)

^{pr2}$

相关问题 更多 >