Python将列值从一个dataframe添加到另一个dataframe中的列

2024-10-03 17:14:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧。我希望在不更改其他列的情况下,将列值从一个数据帧添加到另一个数据帧。你知道吗

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

但我相信这其实不是“Python”的方式。还是希望有人能帮我!你知道吗


Tags: columns数据importdateindextimeas时间