我有一个类似于以下内容的数据框:
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
关于python - 在 Pandas Dataframe 中显示多列,但分组并仅计算一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165706/