首页 > 解决方案 > 根据分组后的元素个数进行条件分组填充缺失值

问题描述

所以我的数据集属于这种类型,其中 ZIP 列中存在一些缺失值。提到下面的列:

d = {'BLOCK': [1, 1,2,2,3], 'ZIP': [10004, 10003, 10004, 10002, 10004], 'TAXCLASS': [1,2,2,1,1], 'B': [1,1,2,3,1]}
zipBlock = pd.DataFrame(data=d) 
zipBlock

    BLOCK   ZIP TAXCLASS    B
0   1   10004   1   1
1   1   10003   2   1
2   2   10004   2   2
3   2   10002   1   3
4   3   10004   1   1


有 100000 个这样的条目,df 仅供参考。

我想按相应的 B、BLOCK 和 TAXCLASS 进行分组,找到该分组中各种 zip 的出现次数,然后用每个分组中最常见的值填充缺失的 ZIP。但是,如果分组后的元素个数小于 <20,则只想看到 B 和 TAXCLASS 分组内最常见的值。

这是我尝试做的:


from collections import Counter
import pandas as pd
import numpy as np

def Most_Common(lst):
    data = Counter(lst)
    return data.most_common(1)[0][0]

zipBlock['ZIP5']= np.where(zipBlock.groupby(["B", "BLOCK", "TAXCLASS"])
['ZIP'].size() > 20,\

zipBlock.groupby(["B","BLOCK", "TAXCLASS"])["ZIP"].\
transform(lambda x: x.fillna(Most_Common(x))),
zipBlock.groupby(["B", "TAXCLASS"])["ZIP"].\
transform(lambda x: x.fillna(Most_Common(x))))


这是我得到的错误:

ValueError:操作数无法与形状一起广播你能帮忙吗?

标签: pythonpandasnumpy

解决方案


推荐阅读