组合两个数据集以形成布尔列(pandas)

时间:2015-09-03 14:43:11

标签: python pandas

我在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中没有唯一标识符。

1 个答案:

答案 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