[英]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_table
或pivot
或者我必須在第二步中為ind1
聚合? 如果是后者,怎么做?
您可以reset_index
和groupby
"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.