ฉันจะเปรียบเทียบคอลัมน์ในเฟรมข้อมูลอื่นได้อย่างไร


23

ฉันต้องการเปรียบเทียบหนึ่งคอลัมน์ของ df กับ df อื่น ๆ คอลัมน์คือชื่อและนามสกุล ฉันต้องการตรวจสอบว่าบุคคลในเฟรมข้อมูลหนึ่งอยู่ในอีกเฟรมหนึ่งหรือไม่


คุณช่วยระบุว่าคุณต้องการให้ผลลัพธ์เป็นอย่างไร? มันเป็น df ที่มีชื่อปรากฏอยู่ในทั้งสอง dfs และไม่ว่าคุณจะต้องการอะไรอีกเช่นนับหรือคอลัมน์ที่ตรงกันใน df2 เป็นต้น ขอบคุณ!
The Lyrist


คุณสามารถเข้าร่วมเฟรมข้อมูลสองตัวในคอลัมน์ที่คุณสนใจและตรวจสอบว่าจำนวนแถวในผลลัพธ์นั้นเป็นค่าบวกหรือไม่
dsaxton

FYI การเปรียบเทียบชื่อและนามสกุลของชื่อชุดใหญ่ ๆ ที่เหมาะสมจะจบลงด้วยความเจ็บปวด - ผู้คนจำนวนมากมีชื่อเหมือนกัน!
Ken Syme

คำตอบ:


22

หากคุณต้องการตรวจสอบค่าเท่ากับค่าในคอลัมน์หนึ่งสมมติว่าชื่อคุณสามารถผสานทั้งสอง Dataframes เข้ากับค่าใหม่:

mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()

ฉันคิดว่ามันมีประสิทธิภาพมากกว่าและเร็วกว่าwhereถ้าคุณมีชุดข้อมูลขนาดใหญ่


1
ฉันคิดว่าเราต้องการใช้การรวมภายในที่นี่แล้วตรวจสอบรูปร่างของมัน
dsaxton

10
df1.where(df1.values==df2.values).notna()

Trueรายการที่แสดงองค์ประกอบทั่วไป mergeนอกจากนี้ยังเผยให้เห็นตำแหน่งขององค์ประกอบทั่วไปที่แตกต่างจากวิธีการแก้ปัญหาที่มี


สิ่งที่อยู่df.ในคำตอบของคุณหรือไม่ มีเพียง แต่df1และdf2แต่ไม่มีdf
เรียน

3

การเปรียบเทียบค่าในสองคอลัมน์ที่ต่างกัน

ใช้ชุดรับค่าที่ไม่ซ้ำกันในแต่ละคอลัมน์ จุดตัดของชุดสองชุดนี้จะให้ค่าที่ไม่ซ้ำกันในทั้งสองคอลัมน์

ตัวอย่าง:

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'}


ฉันคิดว่าคำถามนี้เกี่ยวกับการเปรียบเทียบค่าในสองคอลัมน์ที่แตกต่างกันในดาต้าเฟรมที่แตกต่างกันเนื่องจากผู้ถามต้องการตรวจสอบว่าบุคคลในเฟรมข้อมูลหนึ่งอยู่ในอีกคอลัมน์หนึ่งหรือไม่
Divyanshu Shekhar

ขอบคุณฉันมีคำถามผิด ฉันได้อัพเดทคำตอบแล้ว
aathiraks

1

คุณสามารถตรวจสอบจำนวนที่แน่นอนของตำแหน่งทั่วไปและตำแหน่งที่แตกต่างกันระหว่างสอง df โดยใช้isinและvalue_counts ()

เช่นนั้น:

df['your_column_name'].isin(df2['your_column_name']).value_counts()

ผล:

ตัวอย่าง isin

จริง = ทั่วไปเท็จ = แตกต่างกัน


0

โปรดทราบว่าคอลัมน์ของ dataframes เป็นชุดข้อมูล ดังนั้นถ้าคุณใช้สองคอลัมน์เป็นชุดหมีแพนด้าคุณอาจเปรียบเทียบได้เหมือนกับที่คุณทำกับอาร์เรย์แบบ numpy

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.