Python добавляет значения столбца из одного кадра данных в столбец в другом - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть два кадра данных.Я хочу добавить значения столбцов из одного кадра данных в другой без изменения других столбцов.

import pandas as pd
import numpy as np
dff1 = pd.DataFrame({'Date':[20160501,20160501,20160501,20160501,20160502,20160502],
                     'Time':['0900','0905','0910','0915','0920','0925'],
                 'SKU':[1,2,3,4,5,6],
                 'Demand':[10,35,20,15,5,55],
                 'Supply':[10,20,15,20,0,45]}
                ,columns=['Date', 'Time','SKU', 'Demand', 'Supply'])
dff1 = dff1.set_index(['Date', 'Time']);
dff2 = pd.DataFrame({'Date':[20160501,20160501,20160501,20160501,20160502,20160502,20160503],
                     'Time':['0900','0902','0910','0915','0920','0925','0900'],
                 'SKU':[1,2,3,4,5,6,7],
                 'Demand':[10,35,20,15,5,55,60],
                 'Supply':[10,20,15,20,0,45,50]}
                ,columns=['Date', 'Time','SKU', 'Demand', 'Supply'])
dff2 = dff2.set_index(['Date', 'Time']);
dff3 = dff1.add(dff2, fill_value=0)
dff3.reset_index()

Первый кадр данных имеет Дата : 20160501 и Время : 0905, секундау фрейма данных нет этого времени для даты, но есть дата : 20160501 и время : 0902. Таким образом, задача состоит в добавлении отсутствующих записей даты / времени из одного фрейма данных в другой, суммазначения в столбце SKU , если запись уже есть.Без изменения других столбцов.

Первый:

                    SKU Demand  Supply
Date        Time            
20160501    0900    1   10  10
            0905    2   35  20
            0910    3   20  15
            0915    4   15  20
20160502    0920    5   5   0
            0925    6   55  45

Второй:

                    SKU Demand  Supply
Date        Time            
20160501    0900    1   10  10
            0902    2   35  20
            0910    3   20  15
            0915    4   15  20
20160502    0920    5   5   0
            0925    6   55  45
20160503    0900    7   60  50

Желаемый вывод:

                    SKU Demand  Supply
Date        Time            
20160501    0900    2.0  10.0   10.0
            0902    2.0  35.0   20.0
            0905    2.0  35.0   20.0
            0910    6.0  20.0   15.0
            0915    8.0  15.0   20.0
20160502    0920    10.0 5.0    0.0
            0925    12.0 55.0   45.0
20160503    0900    7.0  60.0   50.0

Мой вывод:

                    SKU Demand  Supply
Date        Time            
20160501    0900    2.0  20.0   20.0
            0902    2.0  35.0   20.0
            0905    2.0  35.0   20.0
            0910    6.0  40.0   30.0
            0915    8.0  30.0   40.0
20160502    0920    10.0 10.0   0.0
            0925    12.0 110.0  90.0
20160503    0900    7.0  60.0   50.0

Проблема: столбцы спроса и предложения также суммируются.

Обновление: я достиг желаемого результата после бессонной ночи:

dff31 = pd.merge(dff1, dff2, how='outer', on=['Date', 'Time'])
dff31.fillna(-1,inplace=True)
dff31['SKU']=dff31['SKU_x']+dff31['SKU_y']
dff31['Demand']=dff31['Demand_x']
dff31['Supply']=dff31['Supply_x']
#dff['Supply']=dff['Supply_x']
for x in range(len(dff31['Demand_x'])):
    a = dff31['Demand_x'][x]
    b = dff31['Demand_y'][x]
    if (a > 0):
        dff31['Demand'][x]=a
    else:
        dff31['Demand'][x]=b

    c = dff31['Supply_x'][x]
    d = dff31['Supply_y'][x]
    if (c > 0):
        dff31['Supply'][x]=a
    else:
        dff31['Supply'][x]=b
dff31 = dff31.drop(columns=['SKU_x','Demand_x','Supply_x','SKU_y','Demand_y','Supply_y'])

Но я считаю, что на самом деле это не "питонический" способ,Все еще надеюсь, что кто-то может мне помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...