2016-01-12 57 views
0

我有一個Python熊貓據幀df有幾列,包括df['FRST_NM']工作,DF ['LAST_NM'],DF ['BRTH_DT']的行數和df ['ADDRESS']。大熊貓算匹配某些字段,但不要在其他領域相匹配

我想查找FRST_NMLAST_NM匹配的數據庫中的行數,但是BRTH_DTADDRESS不匹配。我最終試圖計算名字和姓氏匹配的可能性,但他們各自的出生日期和地址不匹配。這是一個數據完整性項目。

例如,我要統計所有的FRST_NMJohnLAST_NMDoe其中各自BRTH_DTADDRESS字段不匹配的情況。只是要清楚,我不想輸入FRST_NMLAST_NM的值。

我想我在尋找,說的GroupBy FRST_NMLAST_NMBRTH_DTADDRESS一個的GroupBy子句,但我不知道這樣的事情存在。

+0

此數據幀是否源自關係數據庫?我在這裏看到了毫不費力的SQL。 – Parfait

回答

1

你可以指望的行數具有獨特BRTH_DTADDRESS使用

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%獨特的行是一個完整的(和美妙的)僥倖。如果您嘗試使用其他隨機種子,您會發現這種情況不會經常發生...

相關問題