इन दो डेटाफ़्रेम पर विचार करें (सरलीकृत उदाहरण):

DF1
     Name  Age
0    Tom   20
1   nick   21
2  krish   19
3   jack   18


DF2
     Name  Age
0    krish 40
1    jack  18
2    Tom   50
3    Jim   21

ध्यान दें कि दोनों में दिखाई देने वाले नाम के सूचकांक मेल नहीं खाते (यह मेरे डेटासेट के मामले में है)।

मैं DF1 से उन पंक्तियों का चयन करना चाहूंगा जहां नाम DF2 में है और उस व्यक्ति की आयु DF2 में संबंधित मान से मेल नहीं खाती है। तो अपेक्षित आउटपुट है:

     Name  Age
0    Tom   20
2  krish   40

मैं उन पंक्तियों को फ़िल्टर कर सकता हूं जो एक शर्त से मेल खाती हैं (जैसे नाम DF2 में है), लेकिन मैं यह पता लगाने में सक्षम नहीं हूं कि दोनों स्थितियों को एक साथ कैसे जांचें। कोई विचार?

In: df1[df1['Name'].isin(df2['Name'].tolist())]
Out: 
        Name    Age
    0   Tom 20
    2   krish   19
    3   jack    18
0
kronosjt 6 जिंदा 2022, 17:32

2 जवाब

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

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

>>> df1.merge(df2, on='Name', how='left', suffixes=('', '2')) \
       .query('Age != Age2')[df1.columns]

    Name  Age
0    Tom   20
1  krish   19
2
Corralien 6 जिंदा 2022, 17:36
धन्यवाद @Corralien यह मेरे डेटा के लिए काम करता है।
 – 
kronosjt
6 जिंदा 2022, 19:11

आप update के साथ करते हैं, फिर मूल्य की तुलना करके देखते हैं कि क्या इसे अपडेट किया जा रहा है

dfTemp = df1.copy()
dfTemp = df1.set_index('Name').copy()
dfTemp.update(df2.set_index('Name'))
df1[df1.Age!=dfTemp.Age.values]
Out[405]: 
    Name  Age
0    Tom   20
2  krish   19
0
BENY 6 जिंदा 2022, 17:42
धन्यवाद @ बेनी। यह भी काम करता है, दूसरे उत्तर की तुलना में पढ़ने/समझने में थोड़ा मुश्किल है।
 – 
kronosjt
6 जिंदा 2022, 19:18