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

时间:2019-03-13 13:56:00

标签: 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中都有另一行已将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

是否可以在不对行进行迭代的情况下做到这一点?

2 个答案:

答案 0 :(得分:3)

这是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

答案 1 :(得分:1)

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

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