Python 合并两个数据集以形成布尔列(pandas)
我在熊猫中有两个Python 合并两个数据集以形成布尔列(pandas),python,pandas,Python,Pandas,我在熊猫中有两个数据帧: dfm_one data group_a group_b 0 3 a z 1 1 a z 2 2 b x 3 0 b x 4 0 b x 5 1 b z 6 0 c x 7 0 c y 8 3 c z 9 3 c z dfm_2 data group_a group_b 0 4 a x 1 4 a
数据帧
:
dfm_one
data group_a group_b
0 3 a z
1 1 a z
2 2 b x
3 0 b x
4 0 b x
5 1 b z
6 0 c x
7 0 c y
8 3 c z
9 3 c z
dfm_2
data group_a group_b
0 4 a x
1 4 a y
2 4 b x
3 4 b x
4 4 b y
5 1 b y
6 1 b z
7 1 c x
8 4 c y
9 3 c z
10 2 c z
作为输出,我需要一个布尔列,用于指示dfm_one在dfm_two中是否存在针对每个组a组b组合的匹配数据项(即具有相同的值)
因此,我的预期输出是:
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 True
9 True
我猜代码应该是这样的:
dfm_one.groupby(['group_a','group_b']).apply(lambda x: ??)
apply
中的函数应该使用isin
方法
另一个解决方案可能是合并两个数据集,但我认为这并不简单,因为
数据帧中没有唯一标识符好的,这是一个轻微的改动,如果我们将df转换为str
dtype,那么我们可以调用sum
将行连接成字符串,我们可以使用结果字符串作为一种唯一标识符,然后在另一个df上调用isin
,再次转换为str
:
In [91]:
dfm_one.astype(str).sum(axis=1).isin(dfm_two.astype(str).sum(axis=1))
Out[91]:
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 True
9 True
dtype: bool
转换的输出:
In [92]:
dfm_one.astype(str).sum(axis=1)
Out[92]:
0 3az
1 1az
2 2bx
3 0bx
4 0bx
5 1bz
6 0cx
7 0cy
8 3cz
9 3cz
dtype: object
In [93]:
dfm_two.astype(str).sum(axis=1)
Out[93]:
0 4ax
1 4ay
2 4bx
3 4bx
4 4by
5 1by
6 1bz
7 1cx
8 4cy
9 3cz
10 2cz
dtype: object
dfm_-one.merge(dfm_-two)
将为您提供通用值hanks,这就是我想要的!(但我猜字符串操作会使它在我的数据集上运行得非常慢,数据集上有3000多万行。)可能但是调用apply
也会非常慢,因为这只是一个for
循环