簡體   English   中英

計算 pandas 數據幀中的唯一組

[英]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()

幾個解釋:

  • 必須對值進行排序以避免對稱性,並將 (A,B) 和 (B,A) 視為一個團隊。
  • 您可以將字符串“A”和“B”相加以生成代表團隊(A,B)的字符串“AB”

暫無
暫無

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

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