【发布时间】:2017-06-11 20:54:24
【问题描述】:
假设我使用 df.set_index('Class','subclass') 创建了以下数据框,请记住有多个具有子类的类... A>Z。
Class subclass
A a
A b
A c
A d
B a
B b
我将如何计算 Class 中的子类并创建一个名为 no of classes 的单独列,以便我可以看到具有最大子类数量的 Class?我在想某种 for 循环,它遍历 Class 字母并计算子类,如果 Class 字母仍然相同。但是,对于这样的问题,这似乎有点违反直觉。是否有更简单的方法,例如 df.groupby[].count?
期望的输出是:
Class subclass No. of classes
A a 4
A b
A c
A d
B a 2
B b
我已经尝试了group multi-index pandas dataframe 中显示的级别参数,但这似乎对我不起作用
编辑:
我没有提到我想要返回具有最多子类的类。我通过以下方式实现了这一目标:
df.reset_index().groupby('Class')['subclass'].nunique().idxmax()
【问题讨论】:
-
IIUC 你可以做
df['No. of classes'] = df.groupby('Class')['subclass'].transform('count') -
No. of classes中需要空值吗? -
我希望返回具有最多子类的类。经过更多搜索后,我写了以下内容:'df.reset_index().groupby('Class')['subclass'].nunique().idxmax()' 有效。
-
@Joey - 是的,对于最大数量的子类来说,这是一个很好的解决方案。我再添加一个。
标签: python pandas dataframe multi-index