【问题标题】:Find Difference in minutes between two columns based on matching first two characters根据匹配的前两个字符查找两列之间的分钟差
【发布时间】:2019-09-02 14:59:49
【问题描述】:

我有这个数据框,如果前两个字符相同,我试图找出 Date1 和 Date2 之间的分钟差异,并为此创建一个列。 例如,第一行 22 = 22 那么求 20:27:45 和 20:52:03 之间的差异

         Date1     Date2        ID     City
0   22 20:27:45   22 20:52:03   76    Denver
1   02 20:16:28   02 20:49:02   45    Austin
2   15 19:35:09   15 20:52:44   233   Chicago
3   30 19:47:53   30 20:18:01   35    Detroit
4   09 19:01:52   09 19:45:26   342   New York City

这是我迄今为止尝试过的:

(pd.to_datetime(data['Date1'].str[3:]).dt.minute - pd.to_datetime(data['Date2'].str[3:]).dt.minute)

这很好,但我想在此处添加该条件。 我尝试创建一个函数:

def f(data):
    if data['Date1'][:3] == data['Date2'][:3]:
        return pd.to_datetime(data['Date1'][3:]).dt.minute - pd.to_datetime(data['Date2'][3:]).dt.minute 

出现错误:

AttributeError: ("'Timestamp' object has no attribute 'dt'", 'occurred at index 0')

我知道将 pd.to_datetime 添加到系列对象是荒谬的,但是如何将其转换为时间戳并以分钟为单位找出差异?

【问题讨论】:

  • 前2个字符代表什么?
  • @EdekiOkoh 一天

标签: python pandas datetime timedelta


【解决方案1】:

假设您的日期列当前是字符串,您可以解析全天时:分:秒字符串,然后根据时间戳的天属性进行应用

我更改了其中一个值的日期以演示如果日期不相等会发生什么

def diff_func(x):
    date_1 = pd.to_datetime(x.Date1, format='%d %H:%M:%S')
    date_2 = pd.to_datetime(x.Date2, format='%d %H:%M:%S')
    if date_1.day == date_2.day:
        return (date_2-date_1).seconds / 60
    else:
        return None

df['minute_difference'] = df.apply(diff_func, axis=1)



         Date1        Date2  minute_difference
0  22 20:27:45  22 20:52:03          24.300000
1  03 20:16:28  02 20:49:02                NaN
2  15 19:35:09  15 20:52:44          77.583333
3  30 19:47:53  30 20:18:01          30.133333
4  09 19:01:52  09 19:45:26          43.566667

【讨论】:

    【解决方案2】:

    您可以使用Series.str.slice 创建日期列,然后使用pd.to_datetime 创建日期时间对象。最后使用np.where 有条件地填充名为Difference 的新列:

    df['Date1_day'] = df['Date1'].str.slice(start=0, stop=3)
    df['Date2_day'] = df['Date2'].str.slice(start=0, stop=3)
    df['Date1'] = pd.to_datetime(df['Date1'].str.slice(start=3))
    df['Date2'] = pd.to_datetime(df['Date2'].str.slice(start=3))
    
    df['Difference'] = np.where(df['Date1_day'] == df['Date2_day'],
                                df['Date2'] - df['Date1'],
                                np.NaN)
    
    df.drop(['Date1_day', 'Date2_day'], axis=1, inplace=True)
    
    print(df)
                    Date1               Date2   ID           City Difference
    0 2019-04-11 20:27:45 2019-04-11 20:52:03   76         Denver   00:24:18
    1 2019-04-11 20:16:28 2019-04-11 20:49:02   45         Austin   00:32:34
    2 2019-04-11 19:35:09 2019-04-11 20:52:44  233        Chicago   01:17:35
    3 2019-04-11 19:47:53 2019-04-11 20:18:01   35        Detroit   00:30:08
    4 2019-04-11 19:01:52 2019-04-11 19:45:26  342  New York City   00:43:34
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多