首頁 >後端開發 >Python教學 >如何找到 Pandas DataFrame 每組最常見的值?

如何找到 Pandas DataFrame 每組最常見的值?

Linda Hamilton
Linda Hamilton原創
2024-12-01 08:22:10165瀏覽

How to Find the Most Frequent Value in Each Group of a Pandas DataFrame?

為DataFrame 中的每個群組選擇最常見的值

要清理包含多個字串列的數據,需要按某些列對行進行分組並選擇最常見的值每個組中特定列的通用值。本文示範如何使用強大的 Pandas 庫完成此任務。

特定錯誤訊息的程式碼修正

初始查詢中提供的程式碼包含一些錯誤,已在下方修正:

import pandas as pd

source = pd.DataFrame({
    'Country': ['USA', 'USA', 'Russia', 'USA'], 
    'City': ['New York', 'New York', 'Saint Petersburg', 'New York'],
    'Short Name': ['NY', 'New', 'Spb', 'NY']})

# Group by 'Country' and 'City' and calculate the most frequent 'Short Name' in each group
result = source.groupby(['Country', 'City'])['Short Name'].apply(lambda x: pd.Series.mode(x)[0][0])

說明

  1. 使用最新的Series.mode:原始程式碼嘗試將statistics.mode應用於每個群組,這不能很好地處理多種模式,並且可能會引發錯誤。相反,使用更新的 pd.Series.mode 函數,它明確地傳回所有模式的 Series,解決了問題。
  2. 處理多個模式: 確保只有一個選擇最常見的值後,程式碼會從 Series.mode 傳回的 Series 中提取第一個元素。這是透過使用 0 語法來實現的。

其他選項

如果首選 DataFrame 作為結果:

result = source.groupby(['Country', 'City'])['Short Name'].agg(pd.Series.mode).to_frame()

如果您想為每個單獨的行mode:

result = source.groupby(['Country', 'City'])['Short Name'].apply(pd.Series.mode)

注意:如果您願意接受任何模式值作為選擇,您可以使用lambda 函數從系列中擷取第一個模式:

result = source.groupby(['Country', 'City'])['Short Name'].agg(lambda x: pd.Series.mode(x)[0])

以上是如何找到 Pandas DataFrame 每組最常見的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn