【问题标题】:Compare two date columns in pandas and assign labels比较 pandas 中的两个日期列并分配标签
【发布时间】:2021-06-01 16:30:43
【问题描述】:

我有一个带有客户交易的 pandas 数据框,如下所示如何实现以下结果(比较交易结束日期和交易开始日期列)

要创建的标签是

  1. 结束日期列中的开始日期较早。

  2. 开始日期没有出现在结束日期列中。

输入

Transaction ID   Transaction Start Date  Transaction End Date 
      1             27-Oct-2014              11-Nov-2014
      2             29-Oct-2014              30-Nov-2014        
      3             11-Nov-2014              20-Nov-2014        
      4             15-Nov-2014              28-Nov-2014      
      5             20-Nov-2014              05-Dec-2014
      6             28-Nov-2014              15-Dec-2014
      7             29-Nov-2014              20-Dec-2014

期望的输出

Transaction ID   Transaction Start Date  Transaction End Date  Label
      1             27-Oct-2014              11-Nov-2014       
      2             29-Oct-2014              30-Nov-2014       start date did not appear earlier in the end date column
      3             11-Nov-2014              20-Nov-2014       start date appeared earlier in end date column 
      4             15-Nov-2014              28-Nov-2014       start date did not appear earlier in the end date column
      5             20-Nov-2014              05-Dec-2014       start date appeared earlier in end date column 
      6             28-Nov-2014              15-Dec-2014       start date appeared earlier in the end date column
      7             29-Nov-2014              20-Dec-2014       start date did not appear earlier in the end date column

【问题讨论】:

  • 可以解释为什么Transaction ID=4start date did not appear earlier in the end date column 吗?比较哪些日期?
  • 为什么前2个不见了?
  • @jezrael,谢谢我已经更新了问题。我正在尝试将交易结束日期与交易开始日期列中的所有日期进行比较,并检查交易开始日期是否出现在交易结束之前日期列。
  • 比较Transaction ID=4 的日期?
  • @jezrael,对于事务 ID=4 比较相同的事务结束日期和事务开始日期 事务开始日期 2014 年 11 月 15 日在事务结束日期列中没有匹配的事务 ID =1,2 ,3

标签: python python-3.x pandas dataframe datetime


【解决方案1】:

用途:

#convert values to datetimes
df['Transaction End Date'] = pd.to_datetime(df['Transaction End Date'])
df['Transaction Start Date'] = pd.to_datetime(df['Transaction Start Date'])

#check if previous values exist in list comprehenion
mask = [df['Transaction End Date'].iloc[:i].eq(x).any() 
        for i, x in enumerate(df['Transaction Start Date'])]

#set labels
df['Label'] = np.where(mask, 
                        'start date appeared earlier in end date column', 
                        'start date did not appear earlier in the end date column')

#set first value to empty string
df.loc[0, 'Label'] = ''
print (df)
   Transaction ID Transaction Start Date Transaction End Date  \
0               1             2014-10-27           2014-11-11   
1               2             2014-10-29           2014-11-30   
2               3             2014-11-11           2014-11-20   
3               4             2014-11-15           2014-11-28   
4               5             2014-11-20           2014-12-05   
5               6             2014-11-28           2014-12-15   
6               7             2014-11-29           2014-12-20   

                                               Label  
0                                                     
1  start date did not appear earlier in the end d...  
2     start date appeared earlier in end date column  
3  start date did not appear earlier in the end d...  
4     start date appeared earlier in end date column  
5     start date appeared earlier in end date column  
6  start date did not appear earlier in the end d...

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多