簡體   English   中英

熊貓分組到另一個數據幀

[英]Pandas group by into another dataframe

我在熊貓中有一個像這樣的數據框:

Level_1 Level_2 Level_3 User_ID User_Flag
A       B       C       123     1
A       B       C       123     0
D       B       C       124     1
E       B       C       125     0
F       B       C       125     1

我需要一個像這樣的輸出數據幀:

Level_1 Level_2 Level_3 Size Unique_User_Size Unique_User_Size_Condition
A       B       C       2    1                1
D       B       C       1    1                1
E       B       C       1    1                0
F       B       C       1    1                1

所以按級別分組是 -> Level_1,Level_2,Level_3

大小是按組計算的行數,sql 中的 count(*)

Unique_User_Size 是組中不同用戶的數量,sql 中的 count(distinct user_id)

Unique_User_Size_Condition 是 sql 中 User_Flag=1 的組中不同用戶的數量,計數(user_flag=1 時的不同情況,然后 user_id 結束)

有人可以幫我如何得到這個嗎?

這是到達那里的一種方法。 這是一種快速/骯臟的不太干凈的解決方案,但它是一種方法。 我不知道您如何進行條件唯一聚合。 我添加了一個名為 IDFlag 的新字段,它只是 User_Flag == 1 的任何行上的 User_ID。然后您對其進行常規 pd.Series.nunique 聚合。 您也可以編寫一個 lambda 作為包含此邏輯的聚合函數,但就可讀性而言,這是 IMO 的橫向移動。

cols = ['Level_1','Level_2','Level_3','User_ID','User_Flag']
data = [['A','B','C',123,1],
        ['A','B','C',123,0],
        ['D','B','C',124,1],
        ['E','B','C',125,0],
        ['F','B','C',125,1]]
df = pd.DataFrame(data, columns=cols)


agg_dict = {'User_ID':[len,pd.Series.nunique], 
            'IDFlag':pd.Series.nunique}

df.loc[df['User_Flag'] == 1, 'IDFlag'] = df.User_ID
output = df.groupby(['Level_1','Level_2','Level_3']).agg(agg_dict)

output = output.astype(int)

輸出:

                         IDFlag User_ID        
                        nunique     len nunique
Level_1 Level_2 Level_3                        
A       B       C             1       2       1
D       B       C             1       1       1
E       B       C             0       1       1
F       B       C             1       1       1

暫無
暫無

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

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