首页 > 解决方案 > 使用 groupby 后在 Python 中填充缺失的元素

问题描述

我正在研究一个机器学习检测交易欺诈的案例。我在每笔交易中对人员及其欺诈率进行分组。我正在使用他们的电子邮件,因为它定义了人。工作表中有 160k 行。当我像这样对它们进行分组时:

data['ratebymail']=pd.DataFrame(data.groupby('EMAIL')['ISFRAUD'].mean())

有两个问题。data['ratebymail'] 为每封电子邮件返回 NaN。第二个问题是数据是 90k 行。每封电子邮件都有 1 个值,但在原始集合中,它应该是 160k,并且有重复。对于数据集中的第二次出现,我应该在另一笔交易中为该人分配相同的欺诈率。顺序也很重要,因此我不能附加它。

i = 0
ratebymail = []
for mail in data['EMAIL']:
    for other_mail in other_mails:
        if mail == other_mail:
        ratebymail[i] = ratios[j]
    i += 1

我试过这样的东西,但我很困惑,我无法完成代码。我迫切需要帮助。谢谢!

编辑:打字错误。

标签: python-3.xpandasmachine-learningpandas-groupbymissing-data

解决方案


我不确定是否很好地理解了您的问题,但我认为您希望获得每封电子邮件的欺诈率平均值。在这种情况下,答案是:

import numpy as np
import pandas as pd
np.random.seed(111)
# create data
data = pd.DataFrame([np.random.randint(0,100,size=1000), np.random.rand(1000)], index=['EMAIL', 'ISFRAUD']).T
# aggregate
rateByEmail = data.groupby('EMAIL').mean()
rateByEmail.head()

出去:

电子邮件欺诈
0.0 0.466479
1.0 0.615915
10.0 0.665675
11.0 0.462092
12.0 0.315427

如果不是您问题的答案,请举例说明您的输入和所需的输出。


推荐阅读