Используйте объект Series для выбора строк в кадре данных (в Python с использованием Pandas) - PullRequest
1 голос
/ 01 марта 2020

У меня есть объект Series, который выглядит следующим образом:

traffic_id_1    GEO03_D4T-RWS_I_6590A_V_0460A_ID_8481
traffic_id_2      GEO03_D4T-RWS_I_6590_V_0460_ID_1149
traffic_id_3              RWS01_MONIBAS_0351hrl0325ra
traffic_id_4              RWS01_MONIBAS_0351hrr0325ra
traffic_id_5              RWS01_MONIBAS_0351hrr0328ra
Name: 176, dtype: object

Теперь я хочу выбрать строки в кадре данных (похоже, this ), которые содержат эти идентификаторы, используя это Объект серии.

TL; DR Какой самый базовый c путь к этому?

Дополнительная информация:

Я нашел этот пост и этот способ, кажется, работают для меня, но я изучаю курс для своего исследования, и они еще не научили меня атрибуту .isin (). Это не значит, что я не могу использовать это, но я хочу делать это только с теми знаниями, которые у меня есть на курсе.

Я работаю в ноутбуке Jupyter и импортировал pandas, matplotlib, matplotlib.pyplot и seaborn.

1 Ответ

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

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

Вот воспроизводимый пример:

Ваши данные:

traffic_id_1    GEO03_D4T-RWS_I_6590A_V_0460A_ID_8481
traffic_id_2      GEO03_D4T-RWS_I_6590_V_0460_ID_1149
traffic_id_3              RWS01_MONIBAS_0351hrl0325ra
traffic_id_4              RWS01_MONIBAS_0351hrr0325ra
traffic_id_5              RWS01_MONIBAS_0351hrr0328ra

(Скопировано в буфер обмена, затем:)

# make series into df
df = pd.read_clipboard(header=None)
df.columns = ['a', 'b']
# pull out original series from df column
ser = pd.Series(df['b'].values, df['a'].values).copy()
# change some values in the original
df.loc[1, 'b'] = 'foo'
df.loc[3, 'b'] = 'bar'

Итак, фрейм данных:

    a               b
0   traffic_id_1    GEO03_D4T-RWS_I_6590A_V_0460A_ID_8481
1   traffic_id_2    foo
2   traffic_id_3    RWS01_MONIBAS_0351hrl0325ra
3   traffic_id_4    bar
4   traffic_id_5    RWS01_MONIBAS_0351hrr0328ra

И серия:

traffic_id_1    GEO03_D4T-RWS_I_6590A_V_0460A_ID_8481
traffic_id_2      GEO03_D4T-RWS_I_6590_V_0460_ID_1149
traffic_id_3              RWS01_MONIBAS_0351hrl0325ra
traffic_id_4              RWS01_MONIBAS_0351hrr0325ra
traffic_id_5              RWS01_MONIBAS_0351hrr0328ra
dtype: object

# set index as relevant col
df = df.set_index('b')

df.reindex(ser).dropna()

Вывод:

                                        a
GEO03_D4T-RWS_I_6590A_V_0460A_ID_8481   traffic_id_1
RWS01_MONIBAS_0351hrl0325ra             traffic_id_3
RWS01_MONIBAS_0351hrr0328ra             traffic_id_5

Редактировать: вы также можете добиться этого с помощью логического фильтра. Пропуск шага установки индекса в кадре данных:

mask = df.b == ser.reset_index(drop=True)
df[mask]

приводит к тому же самому. (Или в одну строку: df[df.b == ser.reset_index(drop=True)]). Обратите внимание, что необходимо избавиться от уникального индекса серии, чтобы он соответствовал индексу фрейма данных.

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