首頁 > 後端開發 > Python教學 > 如何在不使用迴圈的情況下按 ID 和群組有效地對 Pandas DataFrames 中術語的出現次數進行分組和計數?

如何在不使用迴圈的情況下按 ID 和群組有效地對 Pandas DataFrames 中術語的出現次數進行分組和計數?

DDD
發布: 2024-11-29 00:01:12
原創
598 人瀏覽過

How can I efficiently group and count occurrences of terms within Pandas DataFrames by ID and group without using loops?

將 Pandas DataFrame 中的值分組並計數

在資料分析中,經常需要將資料分組並統計特定值或術語的出現次數。使用 Pandas 中的 groupby 和 size 函數可以輕鬆實現這種類型的聚合。

問題:

假設您有一個包含以下列的 DataFrame df:id、群組和術語。目標是計算 id 和 group 的每個組合中每個唯一術語的出現次數,而不使用迴圈。

解決方案:

為了實現這一點,我們可以使用以下步驟:

  1. Groupby: 按🎜> 按🎜> 按以下方式將DataFrame 分組使用groupby(['id', 'group', 'term'])的三列。這將根據這些列的唯一組合將資料劃分為群組。
  2. 大小: 將大小函數應用於分組資料。 size 計算每個群組中的行數,從而有效地計算每個 id-group 對中每個唯一術語的出現次數。
  3. Unstack: groupby 操作的結果是層次索引。要建立一個表,其中行代表 id-group 對,列代表唯一術語,我們可以使用 unstack(fill_value=0)。這將取消分層索引的堆疊並用 0 填充任何缺失值。

產生的DataFrame 將類似於以下佈局:

如何在不使用迴圈的情況下按 ID 和群組有效地對 Pandas DataFrames 中術語的出現次數進行分組和計數?

示例代碼:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])

result = df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

print(result)
登入後複製

輸出:

   term1  term2  term3
id group             
1   1      2      1
2   2      2      1
   3      1      0
登入後複製

效能:

對於大型資料集, groupby 和size 操作的計算成本可能很高。以下程式碼提供了對具有 1,000,000 行的 DataFrame 進行分組和計數的計時統計資訊:

df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
                       group=np.random.choice(20, 1000000),
                       term=np.random.choice(10, 1000000)))

%timeit df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)
登入後複製

以上是如何在不使用迴圈的情況下按 ID 和群組有效地對 Pandas DataFrames 中術語的出現次數進行分組和計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板