【发布时间】:2016-05-10 04:50:00
【问题描述】:
我有一个由多索引操作生成的数据框,如下所示。
Col3
Col1 Col2
A A1 N
B B1 N
B2 N
C C1 N
C2 N
C3 N
我正在尝试按级别 A、B 和 C 的行数降序计数对这个数据框进行排序。在这种情况下,级别 A 有 1 行,B 有 2 行,C有 3 行...所以输出将是
Col3
Col1 Col2
C C1 N
C2 N
C3 N
B B1 N
B2 N
A A1 N
我可以考虑通过实际计算每个级别的行数并在 df 中添加一列进行排序来手动执行此操作,但是有更优雅的方法吗?如果是这样,有没有办法推广到更多级别?
谢谢!
编辑:生成原始数据框的代码。
df = pd.DataFrame([['a', 'z', 'x', 0.123], ['a','z', 'x', 0.234],
['a', 'z', 'y', 0.451], ['b', 'z', 'x', 0.453], ['b', 'z', 'x', 0.453], ['b', 'z', 'x', 0.453], ['b', 'z', 'x', 0.453]],
columns=['first', 'second', 'value1', 'value2']
).set_index(['first', 'second'])
运行df.ix[df.groupby(level=0).size().sort_values(ascending=False).index,:] 产生TypeError: Expected tuple, got str
【问题讨论】: