Используя ряд в качестве входных данных, как я могу найти строки с совпадающими значениями в pandas кадре данных? например, df.loc [серия]? - PullRequest
1 голос
/ 27 марта 2020

У меня есть DataFrame df и серия s, соответствующие столбцам в df. Я хотел бы найти все строки в df, которые имеют те же значения, что и s. Вероятно, я должен упомянуть, что столбцы могут измениться, но s всегда будет строкой в ​​пределах df.

df = pd.DataFrame.from_dict({'a': {0: 0.015, 1: 0.02, 2: 0.025, 3: 0.015},
 'b': {0: True, 1: True, 2: True, 3: True},
 'c': {0: 'foo', 1: 'foo', 2: 'foo', 3: 'foo'},
 'd': {0: 1, 1: 1, 2: 1, 3: 1}})
s = df.loc[0]

Ожидаемым результатом в этом случае будет возвращаемое значение df.loc[[0,3]]. Кроме того, индекс соответствующих строк может подойти.

Конечно, если бы столбцы были одинаковыми каждый раз, df.loc[df['a']==s['a'], df['b']==s['b'], ...] работал бы просто отлично. Может быть, есть способ генерирования термина в df.loc[ ] посредством некоторого понимания?

Я представляю, что должен быть питонический / pandas способ сделать это.

1 Ответ

0 голосов
/ 27 марта 2020

Сравнить строки по DataFrame.eq, а затем проверить, все ли True s для строк по DataFrame.all и последний фильтр по boolean indexing:

df = df[df.eq(s).all(axis=1)]
print (df)
       a     b    c  d
0  0.015  True  foo  1
3  0.015  True  foo  1

Подробности :

print (df.eq(s))
       a     b     c     d
0   True  True  True  True
1  False  True  True  True
2  False  True  True  True
3   True  True  True  True

print (df.eq(s).all(axis=1))
0     True
1    False
2    False
3     True
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...