如果在df 1中我有一个有3个示例的对,而df 2中我只有2个示例,我将只保留那些没有对的示例。
df_1 = pd.DataFrame(data={'ID':[A, A, A, A,B,B,B,D], 'Value':[1, 1, 1, 2, 1, 1, 2,3]})
df_2 = pd.DataFrame(data={'ID':[A,A,A,B,B,C], 'Value':[1,1,2,1,2,4]})
字符串
结果:
remaining_df = pd.DataFrame(data={'ID':[A,B,B,C,D], 'Value':[1,1,2,4,3]})
型
我想连接ID和值,然后创建一个枢轴,然后计数连接的文本,我还没有任何,我仍然在探索,如果可能的话,或者有人给予我一个想法/指导我使用什么方法。
2条答案
按热度按时间c9x0cxw01#
我认为我们可以简单地使用MultiIndex如下:
字符串
说明
正如@Furas正确地说的那样,首先想到的是
.groupby(['ID', 'Value'])
。在这个答案中,我们使用cumcount()
,它只是在每个组中累积计数。换句话说:型
然后,我们使用
MultiIndex
来做一个对称差分(快速)。为了使用它,我们将每个帧(a
和b
及其k
计数器)转换为MultiIndex
,然后我们取对称差分,并将结果“水合”回一个帧。整个操作应该相当快。gz5pxeao2#
编辑:
现在我发现我的答案有一些问题。对于你的例子,它工作正常,但如果我们在第一个
DataFrame
中添加另一个A1
,那么它在结果中将其减少为单个A1
,但它应该给予两个A1,A1
这个版本不能用ie.
cumsum()
修复,因为它确实需要像其他答案一样的MultiIndex
。但我保留它,也许有些元素会对某人有用。
我的第一个想法是使用
.groupby(["ID", "Value"])
将元素(在每个子帧中)与相同的ID
和Value
分组,并使用.size()
对它们进行计数-它给出两个Series
个字符
稍后它需要减去这些
Series
--但是使用s1 - s2
它为值C
和D
给出值NaN
,因为它们只存在于一个Series
中。它需要.subtract(... fill_value=0)
来填充缺失的元素。它需要
.abs()
将负值转换为正值。的字符串
现在,它需要放弃结果,这给
0
的字符串
最后,它需要清理它-重置索引,删除具有
size
的列(列0
)。完整的工作代码:
型
测试结果:
型