给定两个数据帧,我将一些唯一值提取到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不支持的操作数请帮助。
答案 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, U4
且df2['Unit']
包含U1, U2, U3
,则以下代码会为您提供包含set()
的{{1}}。
{'U3', 'U4'}
答案 1 :(得分:0)
答案 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'}