Панды: Сравнение нескольких столбцов для объединения фреймов данных - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть два кадра данных, которые намного больше этого, но они имеют вид:

df1 = pd.DataFrame({'col1': ['a', 'b', 'b', 'c'],
                   'start': [1, 5, 10, 15],
                   'end': [4, 9, 14, 19]})
df2 = pd.DataFrame({'col1': ['a', 'b', 'b', 'c'],
                   'value': [2, 6, 12, 20],
                  'etc': [1, 2, 3, 4]})

Я хочу объединить их, основываясь на проверке двух вещей в следующем порядке: 1) совпадение col1,2) что value находится между start и end.Я думал что-то вроде (но первая == строка не работает):

if df1.col1 == df2.col1:
    if df1.start < df2.value < df1.end:
        df1.merge(df2)

Я не знаю, будет ли это проверять все строки в df1 против всех строк в df2, хотя?Желаемый результат для этого примера будет:

dfoutput = pd.DataFrame({'col1': ['a', 'b', 'b'],
                        'start': [1, 5, 10],
                        'end': [4, 9, 14],
                        'value': [2, 6, 12],
                        'etc': [1, 2, 3]})

1 Ответ

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

Вы можете сначала объединить и проверить значение,

new_df = df1.merge(df2)
new_df.where(new_df.value.between(new_df.start, new_df.end)).dropna()


    col1    start   end     value   etc
0   a       1.0     4.0     2.0     1.0
1   b       5.0     9.0     6.0     2.0
4   b       10.0    14.0    12.0    3.0
5   c       15.0    19.0    16.0    4.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...