你可以指望的行數具有獨特BRTH_DT
和ADDRESS
使用
df.drop_duplicates().groupby(['FRST_NM','LAST_NM'])['ADDRESS'].count()
(應用drop_duplicates
到整個數據幀是顯著的速度比我 first answer,它使用了自定義的函數來調用drop_duplicates
每組。)例如,
import numpy as np
import pandas as pd
np.random.seed(2016)
N = 50
df = pd.DataFrame({'FRST_NM':np.random.choice(['Charles','Edgar Allan','Agatha'], N),
'LAST_NM':np.random.choice(['Dickens', 'Poe', 'Christie'], N),
'BRTH_DT':np.random.choice([1812, 1809, 1890], N),
'ADDRESS':np.random.choice(['Landport','Boston','Torquay'], N)})
result = pd.DataFrame(
{'num_unique' : (df.drop_duplicates()
.groupby(['FRST_NM','LAST_NM'])['ADDRESS']
.count()),
'count' : df.groupby(['FRST_NM', 'LAST_NM'])['ADDRESS'].count()})
result['percent'] = result['num_unique']/result['count']
print(result)
產生
count num_unique percent
FRST_NM LAST_NM
Agatha Christie 4 4 1.000000
Dickens 8 4 0.500000
Poe 7 5 0.714286
Charles Christie 7 6 0.857143
Dickens 4 4 1.000000
Poe 9 6 0.666667
Edgar Allan Christie 4 3 0.750000
Dickens 4 3 0.750000
Poe 3 3 1.000000
請注意,阿加莎克里斯蒂,查爾斯狄更斯和埃德加愛倫坡出來100%獨特的行是一個完整的(和美妙的)僥倖。如果您嘗試使用其他隨機種子,您會發現這種情況不會經常發生...
此數據幀是否源自關係數據庫?我在這裏看到了毫不費力的SQL。 – Parfait