确定两个 python 系列或数据帧中的额外值
Determine extra value in two python series or dataframes
给定两个数据帧,我将一些唯一值提取到一个 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 not hashable
如果我尝试减法,我会得到 TypeError unsupported operand for str 和 str
请帮忙。
希望我理解你的问题。
如果 select df2['Unit] 的任何值不等于 df['Unit],它是否有效?
df2[df.Unit != df2.Unit ]
输出:
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'}
您可以将 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
,则以下代码将为您提供包含 {'U3', 'U4'}
的 set()
。
>>> set(df1.Unit.unique()).symmetric_difference(set(df2.Unit.unique()))
{'U3', 'U4'}
给定两个数据帧,我将一些唯一值提取到一个 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 not hashable
如果我尝试减法,我会得到 TypeError unsupported operand for str 和 str
请帮忙。
希望我理解你的问题。
如果 select df2['Unit] 的任何值不等于 df['Unit],它是否有效?
df2[df.Unit != df2.Unit ]
输出:
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'}
您可以将 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
,则以下代码将为您提供包含 {'U3', 'U4'}
的 set()
。
>>> set(df1.Unit.unique()).symmetric_difference(set(df2.Unit.unique()))
{'U3', 'U4'}