如何解决检测 DataFrame 的两列中是否存在反向对
我有一个包含两列的数据框; source
和 target
。我想检测反向行,即对于一对值 (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 举报,一经查实,本站将立刻删除。