簡體   English   中英

Pandas - 使用 pivot_table 聚合多個列

[英]Pandas - aggregate multiple columns with pivot_table

我有一個像這樣的 dataframe:

import pandas as pd
import numpy as np

df = pd.DataFrame({"ind0": list("QQQWWWW"), "ind1": list("RRRRSSS"), "vals": range(7), "cols": list("XXYXXYY")})    
print(df)

Output:

  ind0 ind1  vals cols
0    Q    R     0    X
1    Q    R     1    X
2    Q    R     2    Y
3    W    R     3    X
4    W    S     4    X
5    W    S     5    Y
6    W    S     6    Y

我想在從col創建列時聚合值,所以我想到了使用pivot_table

df_res = df.pivot_table(index=["ind0", "ind1"], columns="cols", values="vals", aggfunc=np.sum).fillna(0)    
print(df_res)

這給了我:

cols         X     Y
ind0 ind1           
Q    R     1.0   2.0
W    R     3.0   0.0
     S     4.0  11.0

但是,我寧願獲得獨立於ind1類別的總和,同時將信息保留在此列中。 因此,所需的 output 將是:

cols         X    Y
ind0 ind1          
Q    R       1.0  2.0
W    R,S     7.0  11.0

有沒有辦法為此使用pivot_tablepivot或者我必須在第二步中為ind1聚合? 如果是后者,怎么做?

您可以reset_indexgroupby "ind0" 的df_res並使用agg ,在列上使用不同的函數: join "ind1" 的唯一值並對 "X" 和 "Y" sum

out = df_res.reset_index().groupby('ind0').agg({'ind1': lambda x: ', '.join(x.unique()), 'X':'sum', 'Y':'sum'})

或者,如果您有多個列需要執行相同的 function,您也可以使用 dict 理解:

funcs = {'ind1': lambda x: ', '.join(x.unique()), **{k:'sum' for k in ('X','Y')}}
out = df_res.reset_index().groupby('ind0').agg(funcs)

Output:

cols  ind1    X     Y
ind0                 
Q        R  1.0   2.0
W     R, S  7.0  11.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM