Как найти в подмножестве кадра данных pandas строку, в которой находится значение - PullRequest
0 голосов
/ 10 октября 2018

У меня есть два 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

I 'мы хотели бы использовать столбец '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

Мой подход заключается в том, чтобы сначала установить подмножество моего key_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 происходит такчто я могу использовать этот индекс для выбора места добавления моих данных?

Спасибо

РЕДАКТИРОВАТЬ: ключи уникальны, и все они присутствуют ровно в 1 из3 ключевых столбца.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

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

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

0 голосов
/ 10 октября 2018

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

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...