Интерпретировать диапазон из столбца данных на основе диапазонов групп из другого кадра данных - PullRequest
0 голосов
/ 18 октября 2018

Недавно мне помогли с подобной проблемой, используя R, теперь я хочу сделать это в Python 2.7, используя панд.Я рассмотрел несколько подобных проблем здесь, но, увы, все еще есть проблемы

У меня есть два кадра данных:

import pandas as pd

dfa = pd.DataFrame([["1", "1", "2", "A"], ["2", "1", "2", "A"], ["3", "3", 
    "4", "B"], ["4", "3", "4", "B"], ["5", "5", "6", "C"], ["6", "5", "6", 
    "C"], ["7", "7", "8", "D"], ["8", "7", "8", "D"]], columns=['TimeStamp', 
    'Min', 'Max', 'Group'])
dfb = pd.DataFrame([['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8']], 
    columns = ['TimeStamp'])

enter image description here

Я ищу способ создания идентификатора группы в dfb на основе меток временикоторые попадают в мин-макс каждой группы в дфа.Итак, dfb_final:

enter image description here

Это для больших наборов данных, и я упростил пример.Я просто не совсем уверен, что делать дальше.Я дошел до получения столбцов min max в dfa на основе других ответов.Очень благодарен за обучение от всех вас.

1 Ответ

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

Вы можете использовать np.searchsorted.В приведенном ниже решении предполагается, что нет перекрытий в значениях Min / Max для групп.Сначала преобразуйте некоторые серии в числовые, чтобы их можно было использовать через NumPy:

dfa[dfa.columns[:-1]] = dfa[dfa.columns[:-1]].apply(pd.to_numeric)
dfb['TimeStamp'] = pd.to_numeric(dfb['TimeStamp'])

Примечание datetime / значения отметки времени можно преобразовать в числовые эквиваленты при необходимости.

Затем извлеките уникальные группы и сглаженную версию значений Min / Max:

groups = dfa['Group'].unique()
vals = dfa.drop_duplicates('Group').loc[:, ['Min', 'Max']].values.ravel()

Наконец, используйте np.searchsorted для позиционирования временных меток в vals и используйте результат для индексации groups:

dfb['Group'] = groups[np.searchsorted(dfb['TimeStamp'].values, vals) // 2]

print(dfb)

   TimeStamp Group
0          1     A
1          2     A
2          3     B
3          4     B
4          5     C
5          6     C
6          7     D
7          8     D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...