Как отфильтровать фрейм данных по списку кортежей - PullRequest
0 голосов
/ 21 декабря 2018

Как отфильтровать фрейм данных из набора кортежей, чтобы спаривание было одинаковым?Мне нужен более элегантный способ написания.Я пытаюсь не использовать слияние, потому что это сделает его менее эффективным.

Итак, у меня есть список кортежей с именем tup_list: [('118', '35'), ('35', '35'), ('118', '202') Предполагая, что первый элемент в каждом кортеже - это A, а второй - B, яя пытаюсь отфильтровать мой фрейм данных в соответствии с этим tup_list, где спаривание должно быть одинаковым.

Исходный фрейм данных:

A   B
118 35
118 40
35  202
118 1
35  35

После фильтрации в соответствии с tup_list новый фрейм данных должен быть:

A   B
118 35
35  35

Должны быть возвращены только точные пары.

В настоящее время я использую df= df.merge(tup_list, on=['A','B'], how='inner'). But is not very efficient as my actual data is larger.

Пожалуйста, посоветуйте более эффективный способ написания.

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

С помощью pandas.DataFrame.query вы также можете фильтровать ваш фрейм данных в соответствии с вашим списком кортежей

import numpy as np
import pandas as pd

f = [('118', '35'), ('35', '35'), ('118', '202')]
idxs = [df.query('A=='+ t[0] + ' and B==' + t[1]).index.values for t in f]
idxs = np.concatenate(idxs).ravel().tolist()
df2 = df.iloc[idxs,:]
print(df2)
#      A   B
# 0  118  35
# 4   35  35
0 голосов
/ 21 декабря 2018

С вашим tup_list и фреймом данных с именем df вот одна строка для запрошенного вывода:

df[[x in tup_list for x in list(zip(df.A,df.B))]]
0 голосов
/ 21 декабря 2018

использовать логическое индексирование:

tup_list = [(118, 35), (35, 35), (118, 202)]
df[pd.Series(list(zip(df['A'], df['B']))).isin(tup_list)]

    A   B
0   118 35
4   35  35

list(zip(df['A'], df['B'])) превращает ваши два столбца в список кортежей:

[(118, 35), (118, 40), (35, 202), (118, 1), (35, 35)]

, который вы превращаете в серию и используете isinчтобы вернуть логическое значение:

0     True
1    False
2    False
3    False
4     True
dtype: bool

, которое можно использовать в логическом индексировании

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...