![](/img/trans.png)
[英]How to group , count, and unstack a pandas dataframe based on multiple columns values?
[英]Display multiple columns in Pandas Dataframe, but group by and count only one
我有一个类似于以下的数据框:
df:
facility, location, nickname
factory, floor, flr
office, reception, rec
office, execsuite, es
office, cubicle, cub
training, conference,conf
我想要的输出是一个分组列表,其中包含“设施”计数和显示的其他列中的所有值。
facility, count, location, nickname
factory, 1, floor, flr
office, 3, reception, rec
execsuite, es
cubicle, cub
training, 1, conference, conf
以下输出也将起作用:
facility, location, nickname, count
factory, floor, flr, 1
office, reception, rec, 3
execsuite, es, 3
cubicle, cub, 3
training, conference,conf, 1
我遇到的问题是在不执行合并的情况下包括计数值和“分组依据”值之外的其他列。 以下是我尝试过的一些示例:
(1) df['x'] = df.groupby('facility').apply(lambda x: df['facility'].count())
'x' 列在所有值上作为 NAN 返回
(2) df.groupby(['facility']).agg({'location': 'nunique'})
此处正确返回了计数,但是未显示“位置”和“昵称”列。 尝试将这些添加到 groupby 通过过度聚合将每个计数设置回“1”。
(3) df.groupby(['facility', 'location']).count()
同样,由于我按两列分组,它是过度聚合 - 给我一个无处不在的计数。
(4) df.groupby('facility')['facility','location'].count()
不显示列文本 - 仅计数。
看来我需要的是一组刚刚显示的附加列。 我不确定在没有合并的情况下执行此操作的语法。
您可以按facility
分组,并将集合作为索引facility
并count
:
df['count'] = df.groupby('facility')['facility'].transform('size')
print(df.set_index(['facility', 'count']))
输出
location nickname
facility count
factory 1 floor flr
office 3 reception rec
3 execsuite es
3 cubicle cub
training 1 conference conf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.