如何计算显示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等)。
谢谢!
答案 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");