簡體   English   中英

如何按組計算累積唯一值?

[英]How to count cumulative unique values by group?

我想知道如何按組計算 python 中的累積唯一值?

下面是 dataframe 示例:

團體 類型
一個 1998 紅色的
一個 1998 藍色的
一個 2002年 紅色的
一個 2005年 藍色的
一個 2008年 藍色的
一個 2008年
1998 紅色的
2001年 紅色的
2003年 紅色的
C 1996 紅色的
C 2002年
C 2002年 紅色的
C 2012 藍色的
C 2012

我需要按“組”列創建一個新列。 這個新列的值應該是列“類型”的累積唯一值,按列“年”累積。

下面是我想要的dataframe。 例如: (1)對於A組和1998年,我想統計1998年Type的唯一值,Type有兩個唯一值:紅色和藍色。 (2)對於A組和2002年,我想統計1998年和2002年Type的唯一值,Type也有兩個唯一值:紅色和藍色。 (3)對於A組和2008年,我想統計1998年、2002年、2005年和2008年Type的唯一值,Type的唯一值有紅色、藍色和黃色三個。

團體 類型
一個 1998 紅色的 2
一個 1998 藍色的 2
一個 2002年 紅色的 2
一個 2005年 藍色的 2
一個 2008年 藍色的 3
一個 2008年 3
1998 紅色的 1
2001年 紅色的 1
2003年 紅色的 1
C 1996 紅色的 1
C 2002年 2
C 2002年 紅色的 2
C 2012 藍色的 4
C 2012 4

關於此 dataframe 的另一件事:並非所有組在同一年份都有值。 例如,A 組在 1998 年和 2008 年有兩個值,在 2002 年和 2005 年有一個值。B 組在 1998、2001 和 2003 年有值。

我想知道如何解決這個問題。 您的大力幫助對我來說意義重大。 謝謝!

對於每個Group

Append 新列Want具有您想要的值:

def f(df):
    want = df.groupby('Year')['Type'].agg(list).cumsum().apply(set).apply(len)
    want.name = 'Want'
    return df.merge(want, on='Year')

df.groupby('Group', group_keys=False).apply(f).reset_index(drop=True)

結果:

   Group  Year    Type  Want
0      A  1998     red     2
1      A  1998    blue     2
2      A  2002     red     2
3      A  2005    blue     2
4      A  2008    blue     3
5      A  2008   yello     3
6      B  1998     red     1
7      B  2001     red     1
8      B  2003     red     1
9      C  1996     red     1
10     C  2002  orange     2
11     C  2002     red     2
12     C  2012    blue     4
13     C  2012   yello     4

筆記:

  • 我認為在這里使用.merge是有效的。

  • 您還可以在f中使用 1 個.apply而不是 2 個鏈式來提高效率: .apply(lambda x: len(set(x)))

暫無
暫無

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

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