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

2024-04-25 18:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

pandas中有两个DataFrames

东风汽车公司

    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\u二

    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\u one指明dfm\u two中是否有一个匹配的数据项(即具有相同的值),用于每个group\u a group\u 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方法。你知道吗

另一个解决方案可能是合并这两个数据集,但我认为这并不简单,因为DataFrame中没有唯一标识符。你知道吗


Tags: lambda函数代码falsetruepandasdatagroup
1条回答
网友
1楼 · 发布于 2024-04-25 18:21:28

好吧,这是一个小技巧,如果我们将df转换成str数据类型,那么我们可以调用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

相关问题 更多 >