Python 按日期和不相等日期合并数据帧

Python 按日期和不相等日期合并数据帧,python,pandas,date,merge,Python,Pandas,Date,Merge,我的过程是: 导入包含日期、激活和取消的csv数据 通过激活或取消来子集数据 使用aggfunc“sum”透视数据 转换回数据帧 现在,我需要将两个数据帧合并在一起,但是一个数据帧中存在日期,而另一个数据帧中不存在日期。这两个数据帧从2017年1月1日开始,到2017年12月31日结束。优选地,需要填入指数月的任何观察的输出具有0的对应值 以下是两个数据帧中的.head() 以下代码供参考: import pandas as pd import numpy as np import matp

我的过程是:

  • 导入包含日期、激活和取消的csv数据
  • 通过激活或取消来子集数据
  • 使用aggfunc“sum”透视数据
  • 转换回数据帧
  • 现在,我需要将两个数据帧合并在一起,但是一个数据帧中存在日期,而另一个数据帧中不存在日期。这两个数据帧从2017年1月1日开始,到2017年12月31日结束。优选地,需要填入指数月的任何观察的输出具有0的对应值

    以下是两个数据帧中的.head()

    以下代码供参考:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    import datetime
    
    %matplotlib inline
    
    #import data
    directory1 = "C:\python\Contracts"
    directory_source = os.path.join(directory1, "Contract_Data.csv")
    df_source = pd.read_csv(directory_source)
    
    #format date ranges as times
    #df_source["Activation_Month"] = pd.to_datetime(df_source["Activation_Month"])
    #df_source["Cancellation_Month"] = pd.to_datetime(df_source["Cancellation_Month"])
    df_source["Activation_Day"] = pd.to_datetime(df_source["Activation_Day"])
    df_source["Cancellation_Day"] = pd.to_datetime(df_source["Cancellation_Day"])
    
    
    #subset the data based on status
    df_active = df_source[df_source["Order Status"]=="Active"]
    df_active = pd.DataFrame(df_active[["Activation_Day", "Event_Value"]].copy())
    df_cancelled = df_source[df_source["Order Status"]=="Cancelled"]
    df_cancelled = pd.DataFrame(df_cancelled[["Cancellation_Day", "Event_Value"]].copy())
    
    #remove activations outside 2017 and cancellations outside 2017
    df_cancelled = df_cancelled[(df_cancelled['Cancellation_Day'] > '2016-12-31') & 
                                (df_cancelled['Cancellation_Day'] <= '2017-12-31')]
    
    df_active = df_active[(df_active['Activation_Day'] > '2016-12-31') & 
                                (df_active['Activation_Day'] <= '2017-12-31')]
    
    
    
    #pivot the data to aggregate by day
    df_active_aggregated = df_active.pivot_table(index='Activation_Day',
                                                 values='Event_Value',
                                                 aggfunc='sum')
    
    df_cancelled_aggregated = df_cancelled.pivot_table(index='Cancellation_Day',
                                                       values='Event_Value',
                                                       aggfunc='sum')
    
    
    #convert pivot tables back to useable dataframes
    activations_aggregated = pd.DataFrame(df_active_aggregated.to_records())
    cancellations_aggregated = pd.DataFrame(df_cancelled_aggregated.to_records())
    
    #rename the time columns so they can be referenced when merging into one DF
    activations_aggregated.columns = ["index_month", "Activations"]
    #activations_aggregated = activations_aggregated.set_index(pd.DatetimeIndex(activations_aggregated["index_month"]))
    
    cancellations_aggregated.columns = ["index_month", "Cancellations"]
    #cancellations_aggregated = cancellations_aggregated.set_index(pd.DatetimeIndex(cancellations_aggregated["index_month"]))
    
    将熊猫作为pd导入
    将numpy作为np导入
    将matplotlib.pyplot作为plt导入
    导入操作系统
    导入日期时间
    %matplotlib内联
    #导入数据
    directory1=“C:\python\Contracts”
    directory\u source=os.path.join(directory1,“Contract\u Data.csv”)
    df\u source=pd.read\u csv(目录\u源)
    #将日期范围格式化为时间
    #df_源[“激活月”]=pd.to_日期时间(df_源[“激活月”])
    #df_来源[“取消_月”]=pd.to_日期时间(df_来源[“取消_月”])
    df_源[“激活日”]=pd.to_日期时间(df_源[“激活日”])
    df_来源[“取消日”]=pd.to_日期时间(df_来源[“取消日”])
    #根据状态对数据进行子集划分
    df_活动=df_源[df_源[“订单状态”]=“活动”]
    df_active=pd.DataFrame(df_active[[“激活日”,“事件值”]].copy())
    df_已取消=df_来源[df_来源[“订单状态”]=“已取消”]
    df_cancelled=pd.DataFrame(df_cancelled[[“取消日”,“事件值”]].copy())
    #删除2017年以外的激活和2017年以外的取消
    df_cancelled=df_cancelled[(df_cancelled['Cancellation_Day']>'2016-12-31')和
    (df_取消[‘取消日’]“2016-12-31”)和
    (df_active['Activation_Day']您可以尝试:

    activations_aggregated.merge(cancellations_aggregated, how='outer', on='index_month').fillna(0)
    
    您可以尝试:

    activations_aggregated.merge(cancellations_aggregated, how='outer', on='index_month').fillna(0)
    

    不要使用图像共享样本数据;根据提供的快照,您制作样本应该不难。问题是什么?如何合并两个dfs?如何处理日期?如何填充空单元格?不要使用图像共享样本数据;根据提供的快照,您制作样本应该不难。没有什么问题问题陈述?如何合并两个DFS?如何处理日期?如何填充空单元格?如果遇到您的查询,请考虑接受答案。如果遇到您的查询,请考虑接受答案。