繁体   English   中英

在 Pandas Dataframe 中显示多列,但分组并只计算一列

[英]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分组,并将集合作为索引facilitycount

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM