微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检测 DataFrame 的两列中是否存在反向对

如何解决检测 DataFrame 的两列中是否存在反向对

我有一个包含两列的数据框; sourcetarget。我想检测反向行,即对于一对值 (source,target),如果存在一对值 (target,source),则将 True 分配给新列。

我的尝试:

cols = ['source','target']
_cols = ['target','source']
sub_edges = edges[cols]
sub_edges['oneway'] = sub_edges.apply(lambda x: True if x[x.isin(x[_cols])] else False,axis=1)

解决方法

您可以使用与示例中类似的逻辑来应用 lambda 函数。我们检查数据框中是否有任何行具有反向源/目标对。

顺便说一句,列名“oneway”向我表明与您的问题中描述的逻辑相反,但要更改这一点,我们只需删除 lambda 函数中的 not

代码

import pandas as pd
import random

edges = {"source": random.sample(range(20),20),"target": random.sample(range(20),20)}

df = pd.DataFrame(edges)

df["oneway"] = df.apply(
    lambda x: not df[
        (df["source"] == x["target"]) & (df["target"] == x["source"]) & (df.index != x.name)
    ].empty,axis=1,)

输出

    source  target  oneway
0        9      11   False
1       16       1    True
2        1      16    True
3       11      14   False
4        4      13   False
5       18      15   False
6       14      17   False
7       13      12   False
8       19      19   False
9       12       3   False
10      10       6   False
11      15       5   False
12       3      18   False
13      17       0   False
14       6       7   False
15       5      10   False
16       7       2   False
17       8       9   False
18       0       4   False
19       2       8   False

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。