一般来说,我需要帮助替换«groupby»对象中的一列。
我有一个包含customer_id,mcc_code,tr_type(交易类型)和金额(金钱)的表格:
customer_id mcc_code tr_type amount
39026145 6011 7010 56147.89
39026145 5499 1010 -1392.47
39026145 5499 1010 -920.83
78029866 5411 1010 -8709.44
78029866 5541 1110 -21897.68
78029866 6011 2010 -8983.66
表格较长。我有很多客户,每个客户通过不同的终端(mcc_code)进行数千次交易。
基本解决方案是使用«groupby»属性,然后制作sparce矩阵以进一步使用分类器:
X = transactions.groupby('customer_id').apply(lambda x:
x[['mcc_code']].unstack().value_counts()).unstack().fillna(0)
但是我想通过加权算术平均值(value[i] from value_counts * amount[i] / sum(amount)
)从«groupby»更改此值
我试着做下一个:
code_counts = list(transactions.groupby(['customer_id'])['mcc_code'].value_counts(sort=False))
id_code_sums = list(transactions.groupby(['customer_id', 'mcc_code'])['amount'].sum())
sum_all = sum(id_code_sums)
weighted_mean = []
for i in range(len(id_code_sums)):
weighted_mean.append(code_counts[i]*id_code_sums[i]/sum_all)
现在我需要值列表,但它们存在一些问题。首先,在制作矩阵之前我有(使用我的数据):
X = transactions.groupby('customer_id').apply(lambda x:
x[['mcc_code']].unstack().value_counts()).unstack()
print(X)
>>> customer_id
39026145 5499 446
4814 138
6011 137
5331 82
5541 77
6012 13
5411 13
5200 10
5722 1
52220754 6011 190
5411 149
6010 86
4829 76
第一栏是customer_id
第二列是mcc_code
第三列是该客户使用该mcc终端的频率
我需要使用weighted_mean
列表更改第三列
但是,首先,我无法理解,如何做到这一点
其次,我的weighted_mean
列表中的元素顺序与分组表的第三列中的顺序不同
我不知道,如何将所需的加权平均值与第三列的正确值进行比较。
因此,我希望使用相同的sparce矩阵,但需要weighted_mean
列表中的新值
有什么建议吗?