首页 > 解决方案 > 如何使用熊猫日期时间操作对某些值求和

问题描述

标题不清楚。让我解释。

我有一个这样的数据框:

Order Quantity            Date Accepted        Date Delivered
     20                     01-05-2010            01-02-2011
     10                     01-11-2010            01-03-2011
     300                    01-12-2010            01-04-2011
     5                      01-03-2011            01-03-2012
     20                     01-04-2012            01-11-2013
     10                     01-07-2013            01-12-2014

我想基本上创建另一列,其中包含每行的未交付项目总数。

预期输出:

Order Quantity            Date Accepted        Date Delivered      Pending Order
     20                     01-05-2010            01-02-2011             20
     10                     01-11-2010            01-03-2011             30
     300                    01-12-2010            01-04-2011             330
     5                      01-03-2011            01-03-2012             305
     20                     01-04-2012            01-11-2013             20
     10                     01-07-2013            01-12-2014             30

标签: pandas

解决方案


在这里,我已经获取了您的数据框的一部分并尝试获得结果。

df = pd.DataFrame({'order': [20, 10, 300, 200], 
                   'Date_aceepted': ['01-05-2010', '01-11-2010', '01-12-2010', '01-12-2010'],
                   'Date_delever': ['01-02-2011', '01-03-2011', '01-04-2011', '01-12-2010']})

  order Date_aceepted Date_delever
0     20    01-05-2010   01-02-2011
1     10    01-11-2010   01-03-2011
2    300    01-12-2010   01-04-2011
3    200    01-12-2010   01-12-2010

然后我将使用 pandas 数据时间模块将 Date_accepted 和 Date_deliver 更改为日期时间

df['date1'] = pd.to_datetime(df['Date_aceepted'])

df['date2'] = pd.to_datetime(df['Date_delever'])

然后我将创建一个新的数据框,其中 Date_accepted 和 Date_delever 不一样。我假设您只需要在最终结果中使用它。

dff = df[df['date1'] != df['date2']]

您可以看到现在在 dff 中删除了接受和 delever 相同的最后一行。

   order Date_aceepted Date_delever      date1      date2
0     20    01-05-2010   01-02-2011 2010-01-05 2011-01-02
1     10    01-11-2010   01-03-2011 2010-01-11 2011-01-03
2    300    01-12-2010   01-04-2011 2010-01-12 2011-01-04

然后我确实使用了挂单的pandas cumsum

dff['pending'] = dff['order'].cumsum()

它给了

  order Date_aceepted Date_delever      date1      date2  pending
0     20    01-05-2010   01-02-2011 2010-01-05 2011-01-02       20
1     10    01-11-2010   01-03-2011 2010-01-11 2011-01-03       30
2    300    01-12-2010   01-04-2011 2010-01-12 2011-01-04      330

最后的数据框有两个额外的列,如果您不想在结果中出现,可以删除它们。


推荐阅读