Как найти в подмножестве кадра данных pandas строку, в которой находится значение

1

У меня есть два dataframes, например

import pandas as pd
import numpy as np
from random import shuffle

df_data = pd.DataFrame(data=np.random.randint(low=0, high=10, size=(10,3)), columns=['A', 'B', 'C'])
keys = np.arange(0, 10)
shuffle(keys)
df_data['keys'] = keys

key_data = pd.DataFrame(data=np.reshape(np.arange(1,10), (3,3)), columns=['Key_col1', 'Key_col2', 'Key_col3'])
key_data['Timestamp'], key_data['Info'] = ['Mon', 'Wed', 'Fri'], [13, 2, 47]

Что возвращается, что-то вроде этого:

    A   B   C   keys
0   3   9   2   5
1   7   9   4   7
2   9   6   6   0
3   9   9   0   9
4   8   5   8   6
5   2   5   7   3
6   5   1   2   4
7   3   9   6   2
8   4   2   3   8
9   6   5   5   1

и это:

    Key_col1    Key_col2    Key_col3    Timestamp   Info
0       1           2           3            Mon    13
1       4           5           6            Wed    2
2       7           8           9            Fri    47

Я хотел бы использовать столбец " keys " в первом фрейме данных для поиска только столбцов Key во втором ядре данных (например, Key_col1, Key_col2, Key_col3) (поскольку столбец "info" может содержать значения, которые содержат много ключей).

Затем я добавлю столбцы Timestamp и Info в строку, в которой есть совпадение с key.

Ожидаемый результат для строки 0 будет следующим:

    A   B   C  keys  Timestamp  Info
0   3   9   2    5      Wed       2

Мой подход - это сначала подмножество моего ключа_df для значения:

key_data.iloc[:, 0:3] == 2

OUT
    Key_col1    Key_col2    Key_col3
0   False         True       False
1   False         False      False
2   False         False      False

На следующем шаге я пытаюсь вернуть только строку, где значение True происходит с использованием df.loc

key_data.loc[:, key_data.iloc[:, 0:3] == 2]

Но это приводит к ошибке ValueError: Cannot index with multidimensional key

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

Спасибо

EDIT: ключи уникальны, и все они присутствуют ровно в одном из трех ключевых столбцов.

  • 0
    что произойдет, если ключевой столбец сопоставлен с двумя столбцами, т.е. ключом1 и ключом2?
  • 0
    @RahulAgarwal Ключи уникальны, и все они присутствуют ровно в 1 из 3 ключевых столбцов.
Теги:
pandas

2 ответа

2
Лучший ответ

Это работает для вас, просто переименуйте столбцы:

new_df = pd.merge(df_data, key_data, how= 'right', left_on=['keys','keys','keys'], right_on = ['Key_col1','Key_col2','Key_col3'])

new_df =new_df.dropna(axis=1, how='all')
2

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

Ответ на этот вопрос - key_data.loc[(key_data.iloc[:, 0:3] == 2).any(axis=1)], но для вашей более крупной цели, делая что-то слияние, поскольку Рахул Агарвал предполагает, что это будет лучше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню