पंडों के डेटाफ़्रेम में एक कॉलम में अद्वितीय मानों की गणना जैसे कि Qlik में?


106

अगर मेरे पास इस तरह की एक तालिका है:

df = pd.DataFrame({
         'hID': [101, 102, 103, 101, 102, 104, 105, 101],
         'dID': [10, 11, 12, 10, 11, 10, 12, 10],
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})

मैं count(distinct hID)अद्वितीय छिपाई के लिए 5 की गिनती के साथ आने के लिए Qlik में कर सकता हूं। मैं एक पंडों डेटाफ्रेम का उपयोग करके अजगर में ऐसा कैसे कर सकता हूं? या शायद एक सुन्न सरणी? इसी तरह, अगर करना है तो count(hID)मुझे Qlik में 8 मिलेंगे। पंडों में इसे करने के बराबर तरीका क्या है?


@piRSquared धन्यवाद। मैं df [['dID', 'hID']] कुछ भी कर सकता था। agg (['count', 'size', 'nunique')) और यह काम करता है। लेकिन यह तब काम नहीं करता है जब समूह के साथ जोड़ा जाता है। तो df [['dID', 'hID']]। ग्रुपबी ('mID')। agg (['count', 'size', 'nunique']) KeyError कहते हैं। क्या किसी विशेष कॉलम का चयन करने और शर्त लागू करने का कोई तरीका है?
अल्हपा डेल्टा

तीन तरीके df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared

याdf[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared

1
याdf.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
52 को

जवाबों:


192

भिन्न मानों की गणना करें, उपयोग करें nunique:

df['hID'].nunique()
5

केवल गैर-शून्य मानों की गणना करें, उपयोग करें count:

df['hID'].count()
8

शून्य मान सहित कुल मानों को गिनें, sizeविशेषता का उपयोग करें :

df['hID'].size
8

स्थिति जोड़ने के लिए संपादित करें

बूलियन इंडेक्सिंग का उपयोग करें:

df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])

या उपयोग कर रहा है query:

df.query('mID == "A"')['hID'].agg(['nunique','count','size'])

आउटपुट:

nunique    5
count      5
size       5
Name: hID, dtype: int64

धन्यवाद! हम एक शर्त कैसे जोड़ सकते हैं? MID = 'A' के लिए nunique पसंद है?
अल्हपा डेल्टा

73

अगर मुझे लगता है कि डेटा आपके डेटाफ़्रेम का नाम है, तो आप कर सकते हैं:

data['race'].value_counts()

यह आपको घटित होने के विशिष्ट तत्व और उनकी संख्या दिखाएगा।


यदि आप प्रत्येक अद्वितीय आइटम के लिए अनुपात चाहते हैं तो आप भी कर सकते हैं। data['race'].value_counts(normalize=True)
फर्जी

25

या प्रत्येक स्तंभ के लिए अद्वितीय मानों की संख्या प्राप्त करें:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

इसमें नया pandas 0.20.0 pd.DataFrame.agg

df.agg(['count', 'size', 'nunique'])

         dID  hID  mID  uID
count      8    8    8    8
size       8    8    8    8
nunique    3    5    3    5

आप हमेशा एक के aggभीतर करने में सक्षम रहे हैं groupby। मैंने stackअंत में उपयोग किया क्योंकि मुझे प्रस्तुति बेहतर लगी।

df.groupby('mID').agg(['count', 'size', 'nunique']).stack()


             dID  hID  uID
mID                       
A   count      5    5    5
    size       5    5    5
    nunique    3    5    5
B   count      2    2    2
    size       2    2    2
    nunique    2    2    2
C   count      1    1    1
    size       1    1    1
    nunique    1    1    1

धन्यवाद! हम एक शर्त कैसे जोड़ सकते हैं? MID = 'A' के लिए nunique पसंद है?
अल्हपा डेल्टा

@AlhpaDelta मैंने अंत में कुछ जोड़ा। आशा है कि मदद करता है
piRSquared 16


0

कॉलम में अद्वितीय मानों को गिनने के लिए, hIDडेटाफ्रेम का dfउपयोग करें:

len(df.hID.unique())

-3

आप लेन फ़ंक्शन का उपयोग करके अद्वितीय संपत्ति का उपयोग कर सकते हैं

len (df ['hID']। unique ()) ५

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.