अपने df से शुरू करते हुए, मैं निम्न पंक्तियों को हटाना चाहता हूं: प्रत्येक ID के लिए जांचें कि क्या कम से कम एक बार COD1 = COD2 और यदि GRADE में स्ट्रिंग है 'A' या 'C'। यदि यह 2 शर्तें मिलती हैं तो पंक्तियों को हटा दें।

मेरा विचार मेरी शर्तों को इस तरह रखना था:

indexNames = df[ (df[df.COD1 == df.COD2]) & (df[df['Grade'].isin(['A','C'])]) ].index

और उसके बाद ड्रॉप करें

df.drop(indexNames , inplace=True)

हालाँकि पहली पंक्ति के लिए मुझे TypeError: unsupported operand type(s) for &: 'int' and 'float' मिलता है।

मैं अपने लक्ष्य को प्राप्त करने के बारे में किसी भी विचार की वास्तव में सराहना करूंगा। मेरा डीएफ:

# -- create a dataframe 
list_columns = ['ID', 'COD1', 'COD2','Grade','Data']
list_data = [
    [3215575, 'A21', 'A21','A','2020-09-16 13:25:00'],
    [3215575, 'A11', 'A21','D','2020-09-16 13:55:00'],
    [3215575, 'A21', 'A21','E','2020-09-16 13:12:00'],
    [4058770, 'D10', '213','E','2020-09-16 12:25:00'],
    [4058770, '313', '313','E','2020-09-16 10:25:00'],
    [4058770, '313', '125','B','2020-09-16 13:19:00'],
    [4058771, 'C55', 'C55','C','2020-09-16 14:25:00'],
    [3215577, 'A21', 'A21','B','2020-09-16 13:25:00'],
    [3215577, 'A01', 'A21','D','2020-09-16 13:55:00']
    ]
df = pd.DataFrame(columns=list_columns, data=list_data)

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

    list_columns = ['ID', 'COD1', 'COD2','Grade','Data']
    list_data = [
        [4058770, 'D10', '213','E','2020-09-16 12:25:00'],
        [4058770, '313', '313','E','2020-09-16 10:25:00'],
        [3215577, 'A21', 'A21','B','2020-09-16 13:25:00'],
        [3215577, 'A01', 'A21','D','2020-09-16 13:55:00']
        ]

df2 = pd.DataFrame(columns=list_columns, data=list_data)
0
chris_b 16 सितंबर 2020, 19:34

1 उत्तर

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

IIUC, आपको ग्रुपबी के साथ एक शर्त की आवश्यकता है और किसी के साथ परिवर्तन करें, फिर उलटा करें:

cond = (df.COD1 == df.COD2) & df['Grade'].isin(['A','C'])
df2 = df[~cond.groupby(df['ID']).transform('any')].reset_index(drop=True)

        ID COD1 COD2 Grade                 Data
0  4058770  D10  213     E  2020-09-16 12:25:00
1  4058770  313  313     E  2020-09-16 10:25:00
2  4058770  313  125     B  2020-09-16 13:19:00
3  3215577  A21  A21     B  2020-09-16 13:25:00
4  3215577  A01  A21     D  2020-09-16 13:55:00
0
anky 16 सितंबर 2020, 19:50