簡體   English   中英

如果組中不存在,如何用 0 計算組內的值類型?

[英]How to count value type within a group with 0 if it is absent in the group?

我有一個數據框:

id   value_type
1       b
1       a
1       a
2       a
3       a
3       b

如果組中不存在,我想用 0 計算組中的值類型。因此所需的結果是:

id   value_type       cnt
1       b             1
1       a             2
2       a             1
2       b             0
3       a             1
3       b             1

我怎么能那樣做? 我嘗試了 groupby().size() 但如果它在組中不存在則不計為 0

嘗試.pivot_table然后.stack

x = (
    df.pivot_table(
        index="id", columns="value_type", aggfunc="size", fill_value=0
    )
    .stack()
    .reset_index(name="cnt")
)
print(x)

印刷:

   id value_type  cnt
0   1          a    2
1   1          b    1
2   2          a    1
3   2          b    0
4   3          a    1
5   3          b    1

檢查以下代碼:

import pandas as pd

df = pd.DataFrame({'col1':[1,1,1,2,3,3],'col2':['b','a','a','a','a','b']})

df_col1 = df[['col1']].drop_duplicates().assign(join_col = 1)

df_col2 = df[['col2']].drop_duplicates().assign(join_col = 1)

full_df = pd.merge(df_col1, df_col2,left_on='join_col', right_on='join_col').drop('join_col', axis=1)

final_df = pd.merge(full_df, df.assign(col3=df.col2), left_on=['col1','col2'], right_on=['col1','col2'], how='left').\
fillna(0)

final_df['count'] = np.where(final_df['col3']!=0,1, 0)

final_df.groupby(['col1','col2']).agg({'count':'sum'}).reset_index().sort_values(['col1','count'])

輸出:

在此處輸入圖像描述

暫無
暫無

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

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