Панды агрегируют кадры по наибольшему общему знаменателю столбца и заполняют пропущенные значения - PullRequest
0 голосов
/ 13 ноября 2018

Я немного боролся с этой проблемой, и хотя я мог бы предположить, что есть некоторые обходные пути, я хотел бы знать, есть ли элегантный способ достижения этого результата:

import pandas as pd
import numpy as np

data = np.array([
            [1,10],
            [2,12],
            [4,13],
            [5,14],
            [8,15]])

df1 = pd.DataFrame(data=data, index=range(0,5), columns=['x','a'])

data = np.array([
            [2,100,101],
            [3,120,122],
            [4,130,132],
            [7,140,142],
            [9,150,151],
            [12,160,152]])

df2 = pd.DataFrame(data=data, index=range(0,6), columns=['x','b','c'])

ТеперьЯ хотел бы иметь фрейм данных, который объединяет эти 2 и заполняет отсутствующие значения предыдущим значением или первым значением в противном случае.Оба фрейма данных могут иметь разные размеры сети. Здесь нас интересует уникальный столбец x.

Это будет мой желаемый выходной фрейм df_result.x - это агрегированное уникальное число «x» между двумя кадрами

    x   a   b   c
0   1   10  100 101
1   2   12  100 101
2   3   12  120 122
3   4   13  130 132
4   5   14  130 132
5   7   14  140 142
6   8   15  140 142
7   9   15  150 151
8   12  15  160 152 

Любая помощь или подсказка будет принята с благодарностью, большое спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

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

df1.merge(df2,on='x',how='outer').sort_values('x').ffill().bfill()

Out:

   x     a       b       c
0   1   10.0    100.0   101.0
1   2   12.0    100.0   101.0
5   3   12.0    120.0   122.0
2   4   13.0    130.0   132.0
3   5   14.0    130.0   132.0
6   7   14.0    140.0   142.0
4   8   15.0    140.0   142.0
7   9   15.0    150.0   151.0
8   12  15.0    160.0   152.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...