【发布时间】:2019-12-07 18:42:42
【问题描述】:
我的数据包括发票和客户。 一位客户可以有多张发票。一张发票始终属于一位客户。发票每天更新(报告日期)。
我的目标是以天为单位计算客户的年龄(请参阅“以天为单位的年龄”列)。为了实现这一点,我采用客户报告日期的第一次出现并计算与报告日期最后一次出现的差异。
例如客户 1 出现在 08-14 到 08-15 之间。因此他/她只有 1 天大。
Report Date Invoice No Customer No Amount Age in Days
2018-08-14 A 1 50$ 1
2018-08-14 B 1 100$ 1
2018-08-14 C 2 75$ 2
2018-08-15 A 1 20$ 1
2018-08-15 B 1 45$ 1
2018-08-15 C 2 70$ 2
2018-08-16 C 2 40$ 1
2018-08-16 D 3 100$ 0
2018-08-16 E 3 60$ 0
我解决了这个问题,但是效率很低,而且花费的时间太长。我的数据包含 2600 万行。下面我只计算了一位客户的年龄。
# List every customer no
customerNo = df["Customer No"].unique()
customer_age = []
# Testing for one specific customer
testCustomer = df.loc[df["Customer No"] == customerNo[0]]
testCustomer = testCustomer.sort_values(by="Report Date", ascending=True)
first_occur = testCustomer.iloc[0]['Report Date']
last_occur = testCustomer.iloc[-1]['Report Date']
age = (last_occur - first_occur).days
customer_age.extend([age] * len(testCustomer))
testCustomer.loc[:,'Customer Age']=customer_age
有没有更好的方法来解决这个问题?
【问题讨论】:
标签: python pandas jupyter-notebook data-science