[英]Count unique groups within a pandas data frame
我有一個專利號和發明這些專利的發明者的數據框。 例如:
專利號 | 發明人ID |
---|---|
1 | 一個 |
1 | 乙 |
2 | 乙 |
2 | C |
3 | 一個 |
3 | 乙 |
我將團隊定義為一群共同創造專利的發明家。 例如,團隊 (A,B) 生產了專利 1,(B,C) 專利 2 並再次 (A,B) 生產了專利 3。我想計算獨特團隊的數量。 在這種情況下,答案是 2。
使用 python 計算唯一團隊數量的最快方法是什么?
我已經編寫了這段代碼,但是當我在包含超過 600 萬個專利號和 350 萬個唯一發明人 ID 的整個數據集上運行它時,它非常慢。
teams = []
for pat_id, pat_df in inventor_data.groupby("patent_number"):
if list(pat_df["inventor_id"]) not in teams:
teams.append(list(pat_df["inventor_id"]))
print("Number of teams ", len(teams))
我正在尋找速度改進。 如果您能幫助我了解它們更快的原因,我總是很想了解這一點。
謝謝!
您可以groupby
和聚合為 frozenset 並計算唯一值:
df.groupby('patent_number')['inventor_id'].agg(frozenset).nunique()
Output: 2
有趣的是,您還可以使用value_counts
輕松獲取每個團隊的出現次數:
df.groupby('patent_number')['inventor_id'].agg(frozenset). value_counts()
Output:
(B, A) 2
(B, C) 1
Name: inventor_id, dtype: int64
您可以 go 為:
inventor_data = inventor_data.sort_values("inventor_id")
inventor_data.groupby("patent_number").inventor_id.sum().nunique()
幾個解釋:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.