【发布时间】:2026-01-29 15:15:01
【问题描述】:
我有以下数据集:
CustomerID Date Amount Department \
0 395134 2019-01-01 199 Home
1 395134 2019-01-01 279 Home
2 1356012 2019-01-07 279 Home
3 1921374 2019-01-08 269 Home
4 395134 2019-01-01 279 Home
... ... ... ... ...
18926474 1667426 2021-06-30 349 Womenswear
18926475 1667426 2021-06-30 299 Womenswear
18926476 583105 2021-06-30 349 Womenswear
18926477 538137 2021-06-30 279 Womenswear
18926478 825382 2021-06-30 2499 Home
DaysSincePurchase
0 986 days
1 986 days
2 980 days
3 979 days
4 986 days
... ...
18926474 75 days
18926475 75 days
18926476 75 days
18926477 75 days
18926478 75 days
在按 customerID 聚合(使用 group_by)后,我想做一些特征工程并添加几列。 Date 列不重要,很容易被删除。我想要一个数据集,其中每一行都是一个唯一的 customerID,它只是整数 1,2...(第一列),其他列是:
- 采购总额
- 自上次购买后的天数
- 部门总数
这就是我所做的,并且有效。但是,当我计时时,大约需要 1.5 小时。还有其他更有效的方法吗?
customer_group = joinedData.groupby(['CustomerID'])
n = originalData['CustomerID'].nunique()
# First arrange the data in a matrix.
matrix = np.zeros((n,5)) # Pre-allocate matrix
for i in range(0,n):
matrix[i,0] = i+1
matrix[i,1] = sum(customer_group.get_group(i+1)['Amount'])
matrix[i,2] = min(customer_group.get_group(i+1)['DaysSincePurchase']).days
matrix[i,3] = customer_group.get_group(i+1)['Department'].nunique()
# The above loop takes 6300 sec approx
# convert matrix to dataframe and name columns
newData = pd.DataFrame(matrix)
newData = newData.rename(columns = {0:"CustomerID"})
newData = newData.rename(columns = {1:"TotalDemand"})
newData = newData.rename(columns = {2:"DaysSinceLastPurchase"})
newData = newData.rename(columns = {3:"nrDepartments"})
【问题讨论】:
-
您介意分享数据集吗?
-
@Luke 我在帖子里放了一张照片,你看不到吗?或者你的意思是上传整个数据集?很遗憾,我无法上传。
-
如果您可以提供整个数据集,SO 社区将能够开发一种方法并将其性能与您的进行比较,否则这个问题将毫无意义
-
@Luke - 我完全理解,我希望我能。但是像这样共享数据文件违反了公司政策:/
标签: python pandas dataframe bigdata