[英]How to count accumulative unique values by groups in python?
我想知道如何按組計算 python 中的累積唯一值?
下面是 dataframe 示例:
團體 | 年 | 類型 |
---|---|---|
一個 | 1998 | 紅色的 |
一個 | 2002年 | 紅色的 |
一個 | 2005年 | 藍色的 |
一個 | 2008年 | 藍色的 |
一個 | 2009 | 黃 |
乙 | 1998 | 紅色的 |
乙 | 2001年 | 紅色的 |
乙 | 2003年 | 紅色的 |
C | 1996 | 紅色的 |
C | 2002年 | 橙 |
C | 2008年 | 藍色的 |
C | 2012 | 黃 |
我需要按“組”列創建一個新列。 這個新列的值應該是列“類型”的累積唯一值,按列“年”累積。
下面是我想要的dataframe。 例如:對於 A 組,在 1998 年,“類型”的累積唯一值為 1。對於 A 組,在 2005 年,“類型”的累積唯一值為 2。對於 C 和 2012 年, “類型”的累積唯一值是 4。
| Group| Year| Type|Want|
|------|-----|-----|----|
|A|1998|red|1|
|A|2002|red|1|
|A|2005|blue|2|
|A|2008|blue|2|
|A|2009|yello|3|
|B|1998|red|1|
|B|2001|red|1|
|B|2003|red|1|
|C|1996|red|1|
|C|2002|orange|2|
|C|2008|blue|3|
|C|2012|yello|4|
關於此 dataframe 的另一件事:並非所有組在同一年份都有值。 例如,A 組在 1998、2002、2005 和 2008 年有值。B 組在 1998、2001 和 2003 年有值。
我想知道如何解決這個問題。 您的大力幫助對我來說意義重大。 謝謝!
在GroupBy.transform
中使用自定義 lambda function 和factorize
:
f = lambda x: pd.factorize(x)[0]
df['Want1'] = df.groupby('Group', sort=False)['Type'].transform(f) + 1
print (df)
Group Year Type Want1
0 A 1998 red 1
1 A 2002 red 1
2 A 2005 blue 2
3 A 2008 blue 2
4 A 2009 yello 3
5 B 1998 red 1
6 B 2001 red 1
7 B 2003 red 1
8 C 1996 red 1
9 C 2002 orange 2
10 C 2008 blue 3
11 C 2012 yello 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.