我有这个数据框,如果前两个字符相同,请尝试查找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添加到系列对象是没有意义的,但是如何将其转换为时间戳并在数分钟内找到差异?
答案 0 :(得分:2)
假设日期列当前为字符串,则可以解析整天的小时:分钟:第二个字符串,然后根据时间戳记的day属性进行应用
我更改了其中一个值的日期,以演示如果日期不相等会发生什么情况
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
答案 1 :(得分:1)
您可以使用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