【发布时间】:2018-10-26 08:14:27
【问题描述】:
我正在尝试转换这样的df:
df = pd.DataFrame({'A': ['A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'A2', 'A2', 'A2', 'A2', 'A2', 'A2', 'A2'],
'B': ['B1', 'B1', 'B2', 'B2', 'B3', 'B3', 'B4', 'B5', 'B6', 'B7', 'B7', 'B8', 'B8']})
通过取 n(这里是 2)个最大索引(按 B 的计数)来:
我的做法:
df = df.groupby(['A', 'B'])['A'].count()
df = df.groupby(level=0).nlargest(2).reset_index(level=0, drop=True)
什么给了我(接近我需要的):
现在,我知道的唯一转换 MultiIndex 的方法是:
df.reset_index(level=1)
df.unstack()
但他们没有给我我想要的东西。是否有任何数据框方法可以为我做这件事,或者我需要用 apply 来做。一种方法是遍历每一对:df.index.get_level_values(level=1) 并将其放入 2 列的新 df 中。但这会破坏如果一个 index.level=0,将只有一个 index.level=1
另外:当计数相同时,我不关心 (nlargest) 的顺序。
【问题讨论】:
标签: python pandas dataframe group-by multi-index