У меня есть два кадра данных.Я хочу добавить значения столбцов из одного кадра данных в другой без изменения других столбцов.
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'])
Но я считаю, что на самом деле это не "питонический" способ,Все еще надеюсь, что кто-то может мне помочь!