Saya memiliki dua kerangka data:

a = pd.DataFrame({'id': [10, 20, 30, 40, 50, 60, 70]})
b = pd.DataFrame({'id': [10, 30, 40, 70]})

print(a)
print(b)

# a
   id
0  10
1  20
2  30
3  40
4  50
5  60
6  70

# b
   id
0  10
1  30
2  40
3  70

Saya mencoba memiliki kolom tambahan di a jika id ada di b seperti:

# a
   id   present
0  10   True
1  20   False
2  30   True
3  40   True
4  50   False
5  60   False
6  70   True

Apa yang saya coba:

a.join(b,rsuffix='a')
# and then thought I'd replace nans with False and values with True
# but it does not return what I expect as it joined row by row

    id  ida
0   10  10.000
1   20  30.000
2   30  40.000
3   40  70.000
4   50  nan
5   60  nan
6   70  nan

Kemudian saya menambahkan:

a.join(b,rsuffix='a', on='id')

Tetapi tidak mendapatkan apa yang saya harapkan juga:

    id  ida
0   10  nan
1   20  nan
2   30  nan
3   40  nan
4   50  nan
5   60  nan
6   70  nan

Saya juga mencoba a['present'] = b['id'].isin(a['id']) tetapi hasilnya tidak seperti yang saya harapkan:

id  present
0   10  True
1   20  True
2   30  True
3   40  True
4   50  NaN
5   60  NaN
6   70  NaN

Bagaimana saya bisa memiliki kolom tambahan di a yang menunjukkan jika id ada di b dengan pernyataan Benar / Salah?

1
Jonas Palačionis 25 Mei 2021, 14:10

1 menjawab

Jawaban Terbaik

Anda sudah dekat, perlu menguji a['id'] dengan b['id'] di Series.isin:

a['present'] = a['id'].isin(b['id'])
print (a)
   id  present
0  10     True
1  20    False
2  30     True
3  40     True
4  50    False
5  60    False
6  70     True

Dengan merge dimungkinkan menggunakan parameter indicator=True di kolom kiri gabung dan uji _merge untuk both:

a['present'] = a.merge(b, on='id', how='left', indicator=True)['_merge'].eq('both')
print (a)
   id  present
0  10     True
1  20    False
2  30     True
3  40     True
4  50    False
5  60    False
6  70     True
2
jezrael 25 Mei 2021, 11:11