मैं एक अद्वितीय आईडी द्वारा समूहीकृत सभी गिनती खोजने की कोशिश कर रहा हूं, फिर यह देखने के लिए आवेदन करें कि कितने लोगों ने एक थ्रेसहोल्ड पार किया है। मैं इसे सुन्न में करना चाहता हूं, मैं इसे पंडों का उपयोग करके करने में सक्षम हूं। Numpy पर पता लगाने की कोशिश की जा रही है।

import numpy as np
import pandas as pd

events  = np.array([[  3.,   1., 441., 780.,  30., 262.,   0.,   0.,   0.,  -1.],
       [  4.,   1., 437., 770.,  30., 274.,   0.,   0.,   0.,  -1.],
       [  5.,   2., 431., 754.,  31., 286.,   0.,   0.,   0.,  1.]]) 

df=pd.DataFrame(data=events, columns=["uid", "tid", "f1", "f2", "f3", "f4", "f5", "f6", "f7","f8"])

मैं गिनना चाहता हूं कि प्रत्येक tid कॉलम के लिए कितने f8 कॉलम में -1 हैं। मैं इसे df.tid.unique() का उपयोग करके कर रहा हूं और फिर प्रत्येक row को जांचने के लिए लूप कर रहा हूं। अब मैं इसे नम्पी में करना चाहता हूं, तो क्या मुझे इसे करने के लिए np.where फ़ंक्शन का उपयोग करने की आवश्यकता है?

0
ajayramesh 11 अगस्त 2020, 17:24

2 जवाब

सबसे बढ़िया उत्तर

केवल numpy का उपयोग करके आप इस समाधान को लागू कर सकते हैं:

unique, _ = np.unique(events[:,1], return_counts=True)
result = dict(zip(unique, np.zeros(len(unique))))

for i in range(len(events[:,1])):
    if events[i,-1] == -1:
        result[events[i,1]] += 1

print(result)

आउटपुट:

{1.0: 2.0, 2.0: 0.0}
2
Edoardo Pericoli 11 अगस्त 2020, 17:44

आइए हम pandas.Series.groupby का उपयोग करें

df.f8.eq(-1).groupby(df.tid).sum()
Out[67]: 
tid
1.0    2.0
2.0    0.0
Name: f8, dtype: float64
3
BEN_YO 11 अगस्त 2020, 17:36