Python将一个数据框的列值添加到另一个数据框的列中

时间:2019-02-27 14:55:30

标签: python pandas dataframe add

我有两个数据框。我想将列值从一个数据框添加到另一个数据框,而不更改其他列。

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'])

但是我相信这实际上不是“ pythonic”方式。仍然希望有人能帮助我!

0 个答案:

没有答案