python - 如果有另一行匹配数据中的某些条件,则从 pandas DataFrame 中查找行

标签 python pandas dataframe

例如,如果我有一个像下面这样的 DF:

n from      km      to
0  B        300     A
1  A        300     B
2  D        290     A
3  B        310     C
4  A        290     D

我想选择第 0、1、2 和 4 行,因为它们在同一个 DF 中都有另一行,该 DF 反转了 fromto

df2 = pd.DataFrame(columns=['to', 'from', 'km'])

for index, row in df.iterrows():
    f, t = row['from'], row['to']
    if ((df['to'] == f) & (df['from'] == t)).any():
        df2 = df2.append(row)
> df2

    to  from    km
0   A   B       300
1   B   A       300
2   A   D       290
4   D   A       290

是否可以在不对行进行迭代的情况下执行此操作?

最佳答案

这是排序您的列并找到重复的

的一种方法
s=pd.DataFrame(np.sort(df[['from','to']].values,1)).duplicated(keep=False)
yourdf=df[s]
yourdf
Out[32]: 
   n from   km to
0  0    B  300  A
1  1    A  300  B
2  2    D  290  A
4  4    A  290  D

关于python - 如果有另一行匹配数据中的某些条件,则从 pandas DataFrame 中查找行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143622/

相关文章:

python - django css 和 js 文件在 heroku 上进行 gzip 压缩

python - 如何使用 OpenCV 将 PyBullet 模拟坐标投影到渲染的帧像素坐标?

python - 在 panda 中使用多个 groupby 计数绘制条形图

python - 加入/合并两个 Pandas 数据框并将列用作多索引

r - 在 R 中的两个数据框中按组比较日期

python - 为每一行创建的 Pandas DataFrame

python - 将每五分钟的数据平均为 pandas 数据帧中的一个数据点

python - 如果在发生超时之前没有收到数据,Python 的 socket.recv() 会为非阻塞套接字返回什么?

python - 列表理解与迭代

python - 用优雅的 Pandas 代码替换迭代