繁体   English   中英

使用 Python 中的两个唯一列对总和和计数进行分组

[英]Group sum and count with two unique columns in Python

我有一个数据集,我想在其中对两列进行分组,求和并计算这些值的数量。

数据

source  ex  pw  role    date
aa          10  hello   q222
aa          10  hello   q222
        bb  15  ok      q422
        bb  5   no      q422
        bb  1   sure    q422
        bb  4   yes     q422

想要的

source  ex  pw  count   date
aa          20  2       q222
        bb  25  4       q422

正在做

#df.groupby(['source','date'])['pw'].agg(['count','sum'])
df.groupby(['ex','date'])['pw'].agg(['count','sum'])

但是,有了这个,我现在必须执行串联以合并两个输出。 任何建议表示赞赏

使用groupby()dropna=False + rename()

out=(df.groupby(['source','ex','date'],dropna=False)['pw'].agg(['count','sum'])
      .reset_index().rename(columns={'sum':'pw'}))

或者

groupby()dropna=False和具有命名元组的聚合:

out=(df.groupby(['source','ex'],dropna=False)
       .agg(pw=('pw','sum'),count=('pw','count'),date=('date','first'))
       .reset_index())

output out

    source  ex      date    count   pw
0   aa      NaN     q222    2       20
1   NaN     bb      q422    4       25

尝试使用groupbyfillna创建的新密钥

out = df.groupby([df.source.fillna(df.ex),df.date]).agg({'source':'first',
                                                   'ex':'first',
                                                   'pw':'sum',
                                                   'role':'count',
                                                   'date':'first'}).reset_index(drop=True)
Out[489]: 
  source    ex  pw  role  date
0     aa  None  20     2  q222
1   None    bb  25     4  q422

尝试:

>>> df.fillna('').groupby(['source','ex','date']).agg({'pw': [sum, 'count']})
                pw      
               sum count
source ex date          
       bb q422  25     4
aa        q222  20     2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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