如何替换«groupby»(python)对象中的值?

时间:2016-10-17 15:08:56

标签: python python-3.x pandas grouping

一般来说,我需要帮助替换«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列表中的新值 有什么建议吗?

0 个答案:

没有答案