如何解决groupby显示非分类列的未观察值
我创建了这个简单的示例来说明我的问题:
x = pd.DataFrame({"int_var1": range(3),"int_var2": range(3,6),"cat_var": pd.Categorical(["a","b","a"]),"value": [0.1,0.2,0.3]})
它产生了这个DataFrame:
int_var1 int_var2 cat_var value
0 3 a 0.1
1 4 b 0.2
2 5 a 0.3
其中前两列是整数,第三列是具有两个级别的类别,第四列是浮点型。问题是,当我尝试使用groupby后跟agg时,似乎只有两个选项,或者我不能显示像这样的不可观察的值:
x.groupby(['int_var1','int_var2','cat_var'],observed = True).agg({"value": "sum"}).fillna(0)
int_var1 int_var2 cat_var value
0 3 a 0.1
1 4 b 0.2
2 5 a 0.3
或者我可以像这样显示所有分组变量的不可观察值:
x.groupby(['int_var1',observed = False).agg({"value": "sum"}).fillna(0)
int_var1 int_var2 cat_var value
0 3 a 0.1
b 0.0
4 a 0.0
b 0.0
5 a 0.0
b 0.0
1 3 a 0.0
b 0.0
4 a 0.0
b 0.2
5 a 0.0
b 0.0
2 3 a 0.0
b 0.0
4 a 0.0
b 0.0
5 a 0.3
b 0.0
有没有办法只显示分类变量的未观察值,而不是所有分组变量的所有可能排列?
解决方法
您可以unstack
感兴趣的级别,在这种情况下,cat_var
:
(x.groupby(['int_var1','int_var2','cat_var'],observed=True)
.agg({'value':'sum'})
.unstack('cat_var',fill_value=0)
)
输出:
value
cat_var a b
int_var1 int_var2
0 3 0.1 0.0
1 4 0.0 0.2
2 5 0.3 0.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。