Найти строки в панде DataFrame, если есть другая строка, соответствующая некоторым условиям в данных - PullRequest
1 голос
/ 13 марта 2019

Например, если у меня есть 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, который перевернулfrom и to.

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 ]

3 голосов
/ 13 марта 2019

Вот один из способов 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 голос
/ 13 марта 2019

Не так красиво и коротко, как ответ Вэнь-Бена, но, возможно, более интуитивно.Объединить df с собой:

ok = df.merge(df[['from', 'to']], left_on='to', right_on='from').query('from_x == to_y')['n']
df.loc[ok, :]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...