如何根据日期列合并两个数据框?

Posted

技术标签:

【中文标题】如何根据日期列合并两个数据框?【英文标题】:How to merge two dataframe based on Date column? 【发布时间】:2021-10-05 15:24:09 【问题描述】:

我有两个数据框需要合并。

我的意见

数据帧1:

      Date         |Employee Name  |Non-Billable  |Billable     |Utilization


0     30-04-2021    |John           |92.82         |NaN          |0.9282

1     30-04-2021     |Michael        |66.66         |26.20        |0.9286
 
2     31-05-2021     |Peter          |98.20         |NaN          |0.9820

3     30-06-2021     |James          |15.93         |88.72        |1.0465

4     30-04-2021     |Stephen        |116.09        |NaN        |1.1609

数据帧 2:

 Employee Name         |Date           |Amount  
    
James                  |2021-04-30     |120000.000000

John                   |2021-04-30     |32967.032967
                       |2021-05-31     |34065.934066
                       |2021-06-30     |32967.032967

Peter                  |2021-04-30     |266626.080000

代码

df1 = df1.set_index(['Date','Employee Name']).unstack('Employee Name').resample('M').sum(min_count=1).stack('Employee Name',dropna=False).reset_index()
        df1['Date'] = pd.to_datetime(df1['Date'], format='%y/%m/%d %H:%M:%S').dt.strftime('%d-%m-%Y')
        print("DF1 : ", df1.head())

df2.rename(columns='Start Date':'Date',inplace=True)
df2['Date'] = pd.to_datetime((df4['Date']).dt.strftime("%m-%d-%Y"))
df2= df2.set_index ('Date').groupby('Employee Name')["Amount"].resample('M').sum(min_count=1)
        print("DF2 : ", df2.head())

 # Merge the dataframes

        #df3 = pd.merge(df1, df2[['Employee Name', 'Amount']], on ='Employee Name', how='left').groupby(["Date", "Employee Name"], as_index=False).max()
        df3 = pd.merge(df1, df2, on='Employee Name', how='left')
        df3 = df3.set_index(['Date', 'Employee Name', 'Utilization'])

    df3['Billable_hr'] = df3['Amount'].div(df3['Billable']).round(2)
        sum1 = df3[["Non-Billable", "Billable"]].sum(axis=1, min_count=1)
        df3['Employee_hr'] = df3['Amount'].div(sum1).round(2)

我的输出

我的预期输出

如何解决这个问题?

【问题讨论】:

你应该在['Date', 'Employee Name']上合并df1和df2,目前你只在Name上合并 如果我包含 DATE 列,则永久 Pon - 出现错误 错误是什么?在合并日期和名称之前尝试重置 df2 上的索引。 非常感谢 PermanentPon,它正在工作 【参考方案1】:

有两点需要改变。

在进行合并之前,重置索引:df2.reset_index(inplace=True)

合并应该在两列上完成df3 = pd.merge(df1, df2, on=['Date', 'Employee Name'], how='left')

【讨论】:

以上是关于如何根据日期列合并两个数据框?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 如何在不同格式的日期时间列上合并数据框?

根据 Pandas 中的公共列值合并两个数据框

熊猫:如何在偏移日期合并两个数据框?

根据日期时间索引合并两个数据框(不同大小)

根据最接近的日期时间合并两个数据框

Pandas:如何在两个不同的重叠时间序列上合并两个数据帧