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
近期留言