微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-熊猫grouby和transform(‘count’)给出放置错误-在较小的数据集上工作正常

在Pandas中,一个非常简单的任务是抛出一个我不明白的错误.使用像这样的简单数据集:

test=pd.DataFrame([[1,3],[1,6],[2,4],[3,9],[3,2]],columns=['a','b'])

我可以执行以下命令来计算一个值在测试的“ a”列中出现的次数.

test['count']=test.groupby('a').transform('count')

这样产生:

>>> test
       a  b  count
    0  1  3      2
    1  1  6      2
    2  2  4      1
    3  3  9      2
    4  3  2      2

完善.但是用我的真实数据,这是行不通的.这是我的数据的一小段,可用于重现该问题:

newtest=pd.DataFrame([['010010201001000','001','0220','AL','0'],['010010201001001','001','0220','AL','0'],['010010201001002','001','0220','AL','0'],['010010201001003','001','0160','AL','0'],['010010201001004','001','0160','AL','0']],columns=['BlockID','CountyFP','district','state_x','HD'])
newtest['blocks']=newtest.groupby(['CountyFP','district','state_x']).transform('count')

尝试给我这个错误

ValueError: Wrong number of items passed 2, placement implies 1

我真的看不出是什么使我的“真实”示例与游戏场景有所不同,并且搜索错误会产生其他示例错误,但是我仍然不清楚为什么会在这里产生错误.

更令人困惑的是,如果我只执行上面代码的右侧,它就可以正常工作-生成newtest,每一列都有计数.因此,就像分配是给它带来问题的原因.

解决方法:

您没有选择任何要执行聚合的列,因此它对其余的2列进行了聚合,如果您选择其中一列,则会得到所需的结果:

In [6]:
newtest['blocks'] = newtest.groupby(['CountyFP','district','state_x'])['BlockID'].transform('count')
newtest

Out[6]:
           BlockID CountyFP district state_x HD  blocks
0  010010201001000      001     0220      AL  0       3
1  010010201001001      001     0220      AL  0       3
2  010010201001002      001     0220      AL  0       3
3  010010201001003      001     0160      AL  0       2
4  010010201001004      001     0160      AL  0       2

您的尝试输出

In [9]:
newtest.groupby(['CountyFP','district','state_x']).transform('count')

Out[9]:
   BlockID  HD
0        3   3
1        3   3
2        3   3
3        2   2
4        2   2

您会看到它会生成2列,因为这些是剩余的列,因此您会看到错误消息.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐