[英]Understanding pandas groupby().agg() values
我发现了一些用于测试辛普森悖论的代码,但我对它的工作原理感到困惑。
数据格式如下:
当我跑步时
gb = df_.groupby(["kidney_stone_size", "treatment"]).agg([np.sum, lambda x: len(x)])
gb
我明白了
我无法完全理解df_.groupby(["kidney_stone_size", "treatment"]).agg([np.sum, lambda x: len(x)])
的作用。
一方面,聚合数据似乎是从groupby
部分中省略的列计算出来的,就像我做的那样
gb = df_.groupby(["recovery", "treatment"]).agg([np.sum, lambda x: len(x)])
我明白了
那么这是默认行为 - 为丢失的列计算聚合数据吗?
我知道您可以在字典中明确指定列,但我试图按原样理解代码。
.agg([np.sum, lambda x: len(x)])
究竟计算了什么?
即np.sum
到底应用于什么,同样是lambda x: len(x)
?
请理解,在我的理解中可能存在一些概念上的空白,这可能会使从外部显而易见的事情对我来说并不明显。 非常感谢任何帮助。
那么这是默认行为 - 为丢失的列计算聚合数据吗?
我认为是的,如果在groupby
pandas 之后未指定要处理的列,则使用groupby
中未使用的所有列并应用聚合函数。
the.agg([np.sum, lambda x: len(x)]) 到底在计算什么
这里sum
对于像join
一样工作的非数字列,对于 numeric get sum
,您的自定义 function lambda x: len(x)
返回组的长度 - 数字和非数字。
df_ = pd.DataFrame({
'kidney_stone_size':list('aaaaaa'),
'recovery':[4,5,4,5,5,4],
'col1':[1,3,5,7,1,0],
'col2':['new'] * 6,
'treatment':list('aaabbb')
})
df = df_.groupby(["kidney_stone_size", "treatment"]).agg([np.sum, lambda x: len(x)])
print (df)
recovery col1 col2 \
sum <lambda_0> sum <lambda_0> sum
kidney_stone_size treatment
a a 13 3 9 3 newnewnew
b 14 3 8 3 newnewnew
<lambda_0>
kidney_stone_size treatment
a a 3
b 3
但是,如果仅使用聚合 function 使用sum
类的数字,pandas 默认省略非数字列:
df = df_.groupby(["kidney_stone_size", "treatment"]).sum()
print (df)
recovery col1
kidney_stone_size treatment
a a 13 9
b 14 8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.