首页 > 解决方案 > 如何从字符串中提取日期并聚合它?

问题描述

我有一个数据框,它有两个功能item_listing_timeitem_sale_time

这些是字符串,看起来像这样:

item_listing_time item_sale_time
2018-09-30T19:06:21.000-07:00 2018-09-30T23:06:21.000-07:00

我想创建一个功能sold_in_24h当销售发生在 24 小时时为真。

目前我的工作流程如下所示:

# replacing "T" and "." char in item_listing_time and item_sale_time columns by space
data2['item_listing_time'] = data2['item_listing_time'].str.replace('T',' ')
data2['item_listing_time'] = data2['item_listing_time'].str.replace('.',' ')
data2['item_sale_time'] = data2['item_sale_time'].str.replace('T',' ')
data2['item_sale_time'] = data2['item_sale_time'].str.replace('.',' ')

# storing datetime into datetime_listing column as datetime type
data2['date_listing'] = data2.litem_listing_time.str.split(' ').str[0]
data2['time_listing'] = data2.item_listing_time.str.split(' ').str[1]
data2['datetime_listing'] = data2.date_listing + " "+data2.time_listing

data2['datetime_listing'] = pd.to_datetime(data2['datetime_listing'], format='%Y-%m-%d %H:%M:%S')


# same with saletime
data2['date_sale'] = data2.item_sale_time.str.split(' ').str[0]
data2['time_sale'] = data2.item_sale_time.str.split(' ').str[1]
data2['saletime'] = data2.date_sale + " "+data2.time_sale

data2['saletime'] = pd.to_datetime(data2['saletime'], format='%Y-%m-%d %H:%M:%S')


# creating column for sold_in_24h
data2["was_sold_in_24h"] = (data2["saletime"] - data2["datetime_listing"]) < pd.Timedelta(days=1)

这种方法有效,但不确定它是否是解决这个问题的好方法。

任何意见如何改进它或以这种方式保留它,因为它提供了预期的结果。

谢谢!

标签: pythonpandasdatetime

解决方案


您可以直接将"item_listing_time"and转换"item_sale_time"为日期时间:

df["item_listing_time"] = pd.to_datetime(df["item_listing_time"])
df["item_sale_time"] = pd.to_datetime(df["item_sale_time"])

one_day = pd.Timedelta(days=1)
df["sold_in_24h"] = df.apply(
    lambda x: x["item_listing_time"] + one_day > x["item_sale_time"], axis=1
)
print(df)

印刷:

          item_listing_time            item_sale_time  sold_in_24h
0 2018-09-30 19:06:21-07:00 2018-09-30 23:06:21-07:00         True

推荐阅读