ฉันต้องการเปรียบเทียบหนึ่งคอลัมน์ของ df กับ df อื่น ๆ คอลัมน์คือชื่อและนามสกุล ฉันต้องการตรวจสอบว่าบุคคลในเฟรมข้อมูลหนึ่งอยู่ในอีกเฟรมหนึ่งหรือไม่
ฉันต้องการเปรียบเทียบหนึ่งคอลัมน์ของ df กับ df อื่น ๆ คอลัมน์คือชื่อและนามสกุล ฉันต้องการตรวจสอบว่าบุคคลในเฟรมข้อมูลหนึ่งอยู่ในอีกเฟรมหนึ่งหรือไม่
คำตอบ:
หากคุณต้องการตรวจสอบค่าเท่ากับค่าในคอลัมน์หนึ่งสมมติว่าชื่อคุณสามารถผสานทั้งสอง Dataframes เข้ากับค่าใหม่:
mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()
ฉันคิดว่ามันมีประสิทธิภาพมากกว่าและเร็วกว่าwhere
ถ้าคุณมีชุดข้อมูลขนาดใหญ่
df1.where(df1.values==df2.values).notna()
True
รายการที่แสดงองค์ประกอบทั่วไป merge
นอกจากนี้ยังเผยให้เห็นตำแหน่งขององค์ประกอบทั่วไปที่แตกต่างจากวิธีการแก้ปัญหาที่มี
df.
ในคำตอบของคุณหรือไม่ มีเพียง แต่df1
และdf2
แต่ไม่มีdf
การเปรียบเทียบค่าในสองคอลัมน์ที่ต่างกัน
ใช้ชุดรับค่าที่ไม่ซ้ำกันในแต่ละคอลัมน์ จุดตัดของชุดสองชุดนี้จะให้ค่าที่ไม่ซ้ำกันในทั้งสองคอลัมน์
ตัวอย่าง:
df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})
set(df1['c2']).intersection(set(df2['c2']))
เอาท์พุท:
{2, 5}
การเปรียบเทียบชื่อคอลัมน์ของสอง dataframes
ในกรณีที่คุณพยายามเปรียบเทียบชื่อคอลัมน์ของสองชื่อไฟล์:
ถ้าdf1
และdf2
เป็นสอง dataframes:
set(df1.columns).intersection(set(df2.columns))
นี้จะให้ชื่อคอลัมน์ที่ไม่ซ้ำกันซึ่งมีอยู่ในทั้งสอง dataframes
ตัวอย่าง:
df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})
set(df1.columns).intersection(set(df2.columns))
เอาท์พุท:
{'c2', 'c3'}
คุณสามารถตรวจสอบจำนวนที่แน่นอนของตำแหน่งทั่วไปและตำแหน่งที่แตกต่างกันระหว่างสอง df โดยใช้isinและvalue_counts ()
เช่นนั้น:
df['your_column_name'].isin(df2['your_column_name']).value_counts()
ผล:
จริง = ทั่วไปเท็จ = แตกต่างกัน
โปรดทราบว่าคอลัมน์ของ dataframes เป็นชุดข้อมูล ดังนั้นถ้าคุณใช้สองคอลัมน์เป็นชุดหมีแพนด้าคุณอาจเปรียบเทียบได้เหมือนกับที่คุณทำกับอาร์เรย์แบบ numpy