我在这里阅读了很多主题并尝试了很多不同的东西,但它不能以某种方式起作用。 基本上,我有一个名为order_date的字段,它最初是“对象”。我通过应用此函数将其转换为datetime64 [ns]:
customer_data['order_date'] = pd.to_datetime(customer_data['order_date'])
现在,我想计算两个timedeltas之间的差异并得到一个这样的整数值:
customer_data['recency']= (customer_data.order_date.max() - customer_data['order_date'])
但是当我这样做时,我希望我的新列“recency”是INTEGER值而不是timedelta64 [ns]。知道怎么做吗?
非常感谢提前。
答案 0 :(得分:1)
我认为您可以使用dt.total_seconds
通过astype
投射到int
:
customer_data['recency'] = customer_data['recency'].dt.total_seconds().astype(int)
样品:
rng = pd.date_range('2017-04-03', periods=10)
customer_data = pd.DataFrame({'order_date': rng, 'a': range(10)})
#print (customer_data)
customer_data['recency']= (customer_data.order_date.max() - customer_data['order_date'])
customer_data['recency'] = customer_data['recency'].dt.total_seconds().astype(int)
print (customer_data)
a order_date recency
0 0 2017-04-03 777600
1 1 2017-04-04 691200
2 2 2017-04-05 604800
3 3 2017-04-06 518400
4 4 2017-04-07 432000
5 5 2017-04-08 345600
6 6 2017-04-09 259200
7 7 2017-04-10 172800
8 8 2017-04-11 86400
9 9 2017-04-12 0
dt.days
的另一个解决方案:
customer_data['recency'] = customer_data['recency'].dt.days.astype(int)
print (customer_data)
a order_date recency
0 0 2017-04-03 9
1 1 2017-04-04 8
2 2 2017-04-05 7
3 3 2017-04-06 6
4 4 2017-04-07 5
5 5 2017-04-08 4
6 6 2017-04-09 3
7 7 2017-04-10 2
8 8 2017-04-11 1
9 9 2017-04-12 0