簡體   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