如何比较不同数据框中的列?


23

我想将df的一列与其他df的一列进行比较。列是名称和姓氏。我想检查一个数据框中的人是否在另一个数据框中。


您能指出想要的结果如何吗?这是一个名称同时出现在两个df中的df,以及是否还需要其他诸如计数或df2中的匹配列等内容。谢谢!
Lyrist


您可以将您关心的列上的两个数据框内部连接起来,并检查结果中的行数是否为正。
dsaxton

仅供参考,在任何相当大的名称集上比较名字和姓氏都会很痛苦-很多人都有相同的名字!
Ken Syme '18年

Answers:


22

如果要检查某一列上的等于值,则说“名称”,您可以将两个数据框合并为一个新的:

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.在你的答案?只有df1df2,但没有df
学习者

3

比较两个不同列中的值

使用set在每一列中获取唯一值。这两个集合的交集将在两个列中提供唯一值。

例:

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}


比较两个数据框的列名

如果您要比较两个数据框的列名:

如果df1df2是两个数据帧: set(df1.columns).intersection(set(df2.columns))

这将提供包含在两个数据框中的唯一列名称。

例:

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

您可以使用isinvalue_counts()仔细检查两个df之间共有和不同位置的确切数目

像那样:

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

结果:

例子isin

真=普通假=不同


0

请注意,数据框的列是数据系列。因此,如果将两列作为pandas系列,则可以像对numpy数组那样比较它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.