攝影或3C

Python: pandas.DataFrame 如何找出重複值並計算重複次數? counts = df[duplicates] .groupby([‘name’]) .size() .reset_index(name=’count’)

import pandas as pd

data = {‘id’: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
‘name’: [‘John’, ‘Anna’, ‘John’, ‘Anna’,
‘John’, ‘Anna’, ‘John’, ‘Anna’,
‘John’, ‘Anna’]}

df = pd.DataFrame(data)

duplicates = df.duplicated(subset=[‘name’])
counts = df[duplicates].groupby([‘name’]).size().reset_index(name=’count’)

print(counts)

df:

duplicates = df.duplicated(subset=[‘name’])

duplicates 為一個bool Series

透過呼叫 df.duplicated(subset=['name']) 來產生的。

其中subset 參數指定了要檢查是否有重複值的欄位,

這裡是 name 欄位。

可以用來切片

只保留對應到True的元素

 

counts = df[duplicates].groupby([‘name’]).size().reset_index(name=’count’)

一步一步做分解動作

df[duplicates]: 

df[duplicates] 會篩選出 df

所有被標示為重複的紀錄

只保留對應到True(重複)的元素

注意最左邊的index,已經沒有0,1

 

df[duplicates].groupby([‘name’]).size()

呼叫 groupby 方法,

name 欄位為分組依據(name變成index了),

並呼叫 size 方法計算每個分組的大小,

也就是重複出現的次數。

其type為Series:

df[duplicates].groupby([‘name’]).size().reset_index(name=’count’)

呼叫 reset_index 方法,

name 欄位轉換為普通欄位,

並將計算結果命名為 count

最終產生的 counts

groupby操作的結果是一個Series,

其中包含數量值,

而組的名稱(在這種情況下,是 ‘name’ 列中的值)則作為索引。

通過調用 .reset_index(name=’count’),

你將這個Series轉換回一個DataFrame,

‘name’ 索引變成DataFrame的一個列,

而計數值則成為另一個名為 ‘count’ 的列。

在這種情況下,’count’ 列明顯包含計數值,

因為它是通過在groupby對象上調用 size() 方法創建的,

該方法計算每個組的出現次數。

 

groupby() :

就算資料是DataFrame,

有”fruit” “price”兩欄

經過groupby(“fruit”).size()

index就是”fruit”, values為重複次數

必然是只有一欄資料的Series

.reset_index(name=”count”)

當然只會為唯一一欄命名

 

.reset_index(name=”count”)

.to_frame(name=”count”).reset_index()

同效果

.to_frame(name=”count”) .reset_index()

去掉結尾的.reset_index()

to_frame() 方法将当前 Series 转换为一个 DataFrame,

新 DataFrame 只有一 column,

并可以通过 name 参数指定该column的名称。

 

groupby() 可以對兩欄作用:

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡