pandas groupby:如何计算总数百分比?

时间:2017-10-12 11:17:07

标签: python pandas

如何计算显示groupby中总数百分比的列?

一种方法是在gorupby之后手动计算它,如本例的最后一行:

import numpy as np
import pandas as pd
df= pd.DataFrame(np.random.randint(5,8,(10,4)), columns=['a','b','c','d'])
g = df.groupby('a').agg({'b':['sum','mean'], 'c':['sum'], 'd':['sum']})
g.columns = g.columns.map('_'.join)
g['b %']=g['b_sum']/g['b_sum'].sum()

然而,在我的实际数据中,我有更多的列,并且我需要在总和之后的%,所以使用这种方法我必须手动更改列的顺序。

是否有更直接的方式来实现它,以便%就是总和之后的列?请注意,我需要agg()或类似的东西,因为在我的所有groupbys中,我将不同的聚合函数应用于不同的列(例如x的sum和avg,但只有y的min等)。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您需要agg中的lambda function,然后% np.random.seed(78) df= pd.DataFrame(np.random.randint(5,8,(10,4)), columns=['a','b','c','d']) g =(df.groupby('a') .agg({'b':['sum',lambda x: x.sum()/ df['b'].sum(),'mean'], 'c':['sum'], 'd':['sum']})) g.columns = g.columns.map('_'.join).str.replace('<lambda>','%') print (g) d_sum c_sum b_sum b_% b_mean a 5 25 24 24 0.387097 6 6 11 11 14 0.225806 7 7 22 23 24 0.387097 6 public static Supplier<String> passwordStore(String encryptedPassword){ String plainTextPassword = encryptedPassword; //do some decryption return () -> plainTextPassword; }

graph.addEdge("class:hasChild", 
                    graph.getVerticesOfClass(domain).iterator().next(),
                    graph.getVerticesOfClass(range).iterator().next(),
                    "hasChild");