gpt4 book ai didi

python - 对多索引 pandas DataFrame 求和

转载 作者:太空狗 更新时间:2023-10-30 02:40:41 25 4
gpt4 key购买 nike

假设我使用 df.set_index('Class','subclass') 创建了以下数据框,请记住有多个具有子类的类... A>Z。

Class   subclass    
A a
A b
A c
A d
B a
B b

我如何计算该类中的子类并创建一个名为 no of classes 的单独列,以便我可以看到具有最多子类的类?我在想某种 for 循环,它贯穿类字母,如果类字母仍然相同,则计算子类。然而,对于这样的问题,这似乎有点违反直觉。是否有更简单的方法,例如 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()

最佳答案

您可以使用 transform ,但得到重复值:

df['No. of classes'] = df.groupby(level='Class')['val'].transform('size')

print (df)
val No. of classes
Class subclass
A a 1 4
b 4 4
c 5 4
d 4 4
B a 1 2
b 2 2

但是如果需要空值:

df['No. of classes'] = df.groupby(level='Class')
.apply(lambda x: pd.Series( [len(x)] + [np.nan] * (len(x)-1)))
.values
print (df)
val No. of classes
Class subclass
A a 1 4.0
b 4 NaN
c 5 NaN
d 4 NaN
B a 1 2.0
b 2 NaN

获取最大数量的 Class 的另一种解决方案是:

df = df.groupby(level=['Class'])
.apply(lambda x: x.index.get_level_values('subclass').nunique())
.idxmax()
print (df)
A

关于python - 对多索引 pandas DataFrame 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com