Pandas: การจัดทำดัชนีบูลีนด้วยไวยากรณ์ 'รายการในรายการ'

สมมติว่าฉันมี DataFrame พร้อมคอลัมน์ชื่อ col1 หากฉันต้องการได้แถวทั้งหมดโดยที่ col1 == 'a' ฉันสามารถทำได้ด้วย:

df[df.col1 == ‘a’]

ถ้าฉันต้องการแถวที่ col1 คือ 'a' หรือ 'b' ฉันสามารถทำได้:

df[(df.col1 == ‘a’) | (df.col1 == ‘b’)]

แต่ฉันอยากทำสิ่งนี้จริงๆ (ผิดกฎหมายทางวากยสัมพันธ์) เช่นนี้:

df[df.col1 in [‘a’, ‘b’, ‘c’]]

มีวิธีแพนด้าที่เหมาะสมในการทำเช่นนั้นหรือไม่?

นี่คือสิ่งที่ฉันใช้แทน:

sort_func = lambda x: x in [‘a’, ‘b’, ‘c’]
mask = df[‘col1’].apply(sort_func)
df[mask]

แต่… มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่? สิ่งนี้รบกวนฉัน


person J Jones    schedule 26.10.2015    source แหล่งที่มา


คำตอบ (1)


ใช้ isin() สำหรับการกรอง

In [212]: df = pd.DataFrame([['a', 1], ['b', 2], ['c', 3], ['d', 4]],
                            columns=['col1', 'col2'])


In [213]: df['col1'].isin(['a', 'b', 'c'])
Out[213]:
0     True
1     True
2     True
3    False
Name: col1, dtype: bool

In [214]: df.ix[df['col1'].isin(['a', 'b', 'c']), :]
Out[214]:
  col1  col2
0    a     1
1    b     2
2    c     3
person Zero    schedule 26.10.2015