如果存在与数据中的某些条件匹配的另一行,则从pandas DataFrame中查找行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果存在与数据中的某些条件匹配的另一行,则从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中有另一行,它有倒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

是否可以在没有迭代行的情况下执行此操作?

答案

这是sort您的列的一种方式,并找到duplicated

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

不像文本的答案那么好又短,但也许更直观。将df与自身合并:

ok = df.merge(df[['from', 'to']], left_on='to', right_on='from').query('from_x == to_y')['n']
df.loc[ok, :]

以上是关于如果存在与数据中的某些条件匹配的另一行,则从pandas DataFrame中查找行的主要内容,如果未能解决你的问题,请参考以下文章

如果满足某些条件,则从行中获取信息

TS / JS-如果对象的属性与数组中的另一个属性相匹配,则从对象数组中获取“值”

如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回

如果存在则从表中选择,否则从oracle中的另一个表中选择

如果存在表 B,则从表 B 中获取数据,否则保留表 A(在某些列之后)

在 PySpark 中的窗口上获取与某些条件匹配的第一行