मेरे पास कोड के साथ एक डेटाफ्रेम एक कॉलम है और नीचे के अनुसार विभिन्न स्थिति वाला एक है:

db = {'Code': ['BBBBBR7','BBBBBR7','BCCMR', 'BBLGLC7', 'BBLGLC7', 'BCCBD', 'BCCBD', 'BCHRC'],
        'Status': ['OK','KO','OK', 'OK', 'YES', 'PASS', 'PASS', 'OK']
       }

df = pd.DataFrame(db)

enter image description here

मैं केवल उन मानों को रखना चाहता हूं जहां पहले कॉलम में डुप्लीकेट है और जहां स्थिति ठीक है लेकिन डुप्लीकेट कोड, ओके स्टेटस और अन्य संबंधित स्थिति दोनों को आउटपुट करती है।

अपेक्षित उत्पादन:

enter image description here

3
Caiotru 4 नवम्बर 2020, 20:38

3 जवाब

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

दो मास्क परिभाषित करें, एक यह जाँचने के लिए कि क्या किसी समूह में कम से कम एक OK है, और दूसरा यह जाँचने के लिए कि क्या डुप्लिकेट हैं। फिर उन्हें थोड़ा सा & के साथ श्रृंखलाबद्ध करें और डेटाफ़्रेम को अनुक्रमित करें:

m1 = df.Status.eq('OK').groupby(df.Code).transform('any')
m2 = df.Code.duplicated(keep=False)
print(df[m1&m2])

      Code Status
0  BBBBBR7     OK
1  BBBBBR7     KO
3  BBLGLC7     OK
4  BBLGLC7    YES
2
yatu 4 नवम्बर 2020, 20:42
data = data.drop_duplicates(keep='first')

data = data[data.groupby(['Code'])['Code'].transform('count') > 1]
1
Sander van den Oord 4 नवम्बर 2020, 21:27

मुझे पता है कि यह वह उत्तर नहीं है जिसकी आप तलाश कर रहे हैं, लेकिन मैं इसे साझा करना चाहता था ताकि यह उपयोगी हो सके। मैं भी अभी सीख रहा हूँ।

newdf = df[df.duplicated('Code',keep=False)]
newdf =newdf[newdf["Status"]!="PASS"]
newdf = newdf.reset_index()
newdf = newdf.drop('index',1)
newdf
0
Eray 4 नवम्बर 2020, 21:18