我在DataFrames
中有两个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_two
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指示每个group_a group_b组合在dfm_two中是否存在匹配的数据条目(即具有相同的值)。
所以我的预期输出是:
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
方法。
另一个解决方案可能是合并两个数据集,但我认为这不是微不足道的,因为DataFrame
中没有唯一标识符。
答案 0 :(得分:1)
好的,这是一个轻微的黑客,如果我们将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