确定两个python系列或数据帧中的额外值

时间:2016-02-11 01:23:53

标签: python numpy pandas dataframe series

给定两个数据帧,我将一些唯一值提取到groupby中,然后我想比较两个唯一值并找到不同的值。

unit1 = ["U1", "U2", "U1", "U2", "U1", "U2"]
unit2 = ["U1", "U2", "U1", "U2", "U1", "U2, "U3"]
count1 = [2,4,6,8,10,12]

df = pd.DataFrame({'Unit': unit1,
                   'Count': count1})
df2 = pd.DataFrame({'Unit': unit2,
                   'Count': count1})

units_in_1 = df.groupby(['Unit'])
unit1_list = units_in_1['Unit'].unique()

units_in_2 = df2.groupby(['Unit'])
unit2_list = units_in_2['Unit'].unique()

我最终想要的是U3,以便我可以回去查找df2中的所有实例。

unit1_list是一个系列,我似乎无法正常工作。

创建一个列表并根据this answer进行交集失败,因为着名的numpy不可用

如果我尝试减法,我会得到str和str

的TypeError不支持的操作数

请帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用isin()和否定(~)运算符来实现此目的。

>>> stuff_in_df2_but_not_in_df1 = df2[~df2.Unit.isin(df1.Unit)]['Unit'].unique()
['U3']

这段有点神秘的代码告诉Pandas会在df2['Unit']中提供df1['Unit']中不存在的所有项目。

如果您希望双向工作(例如,您希望列出df1但不在df2 中的内容。在df2但不在df1中,您可以使用set.symmetric_difference()

如果df1['Unit']包含U1, U2, U4df2['Unit']包含U1, U2, U3,则以下代码会为您提供包含set()的{​​{1}}。

{'U3', 'U4'}

答案 1 :(得分:0)

希望我能理解你的问题。

如果您选择df2 ['单位]的任何值不等于df ['单位],它是否有效?

df2[df.Unit != df2.Unit ]

输出:     enter image description here

答案 2 :(得分:0)

IIUC然后您可以创建set个唯一值,然后拨打difference

In [161]:
combined = set(df['Unit'].unique().tolist()+df2['Unit'].unique().tolist())
combined

Out[161]:
{'U1', 'U2', 'U3'}

In [162]:    
combined.difference(df['Unit'].unique())

Out[162]:
{'U3'}