Python,计算另一列中值的出现频率
所以我一直在寻找类似问题的解决方案,并不断碰壁。我是python新手,使用pandas/python进行ETL,如果我没有充分描述我的情况,请原谅 我有两个数据帧df1看起来像:Python,计算另一列中值的出现频率,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,所以我一直在寻找类似问题的解决方案,并不断碰壁。我是python新手,使用pandas/python进行ETL,如果我没有充分描述我的情况,请原谅 我有两个数据帧df1看起来像: Subscriber Key OtherID AnotherID 1 'abc' '12' '23' 2 'bcd' '45' '56' 3 'abc' '12' '23' 4 'abc'
Subscriber Key OtherID AnotherID
1 'abc' '12' '23'
2 'bcd' '45' '56'
3 'abc' '12' '23'
4 'abc' '12' '23'
5 'cde' '78' '90'
6 'bcd' '45' '56'
Subscriber Key OtherID AnotherID
1 'abc' '12' '23'
2 'bcd' '45' '56'
3 'cde' '78' '90'
df2看起来像:
Subscriber Key OtherID AnotherID
1 'abc' '12' '23'
2 'bcd' '45' '56'
3 'abc' '12' '23'
4 'abc' '12' '23'
5 'cde' '78' '90'
6 'bcd' '45' '56'
Subscriber Key OtherID AnotherID
1 'abc' '12' '23'
2 'bcd' '45' '56'
3 'cde' '78' '90'
我试图返回一个计数,即SubscriberKey:“abc”在数据帧中出现的次数。找到这些值后,我想将计数附加到另一个数据帧(df2)上,这是我第一次消除重复数据帧
它看起来是这样的:
Subscriber Key OtherID AnotherID Total Instances
1 'abc' '12' '23' '3'
2 'bcd' '45' '56' '1'
3 'cde' '78' '90' '1'
Subscriber Key OtherID AnotherID Total Instances
1 'abc' '12' '23' '1'
2 'bcd' '45' '56' '3'
3 'cde' '78' '90' '2'
所以我试着用这句话:
df1.groupby(['SubscriberKey']).size()
我只使用'SubscriberKey'的原因是,有些行只在该列中填写'OtherID','AnotherID'为空
我还尝试了Series.value\u count()。当我尝试使用groupby和size()并将df2['Total Instances']的值设置为出现次数时,这些值似乎没有正确对齐
例如,新表如下所示:
Subscriber Key OtherID AnotherID Total Instances
1 'abc' '12' '23' '3'
2 'bcd' '45' '56' '1'
3 'cde' '78' '90' '1'
Subscriber Key OtherID AnotherID Total Instances
1 'abc' '12' '23' '1'
2 'bcd' '45' '56' '3'
3 'cde' '78' '90' '2'
所以我最初的想法是,在执行groupby时,函数会自动对输出进行排序。我试图通过将groupby表保存为csv进行检查,并意识到它只打印count列,而不打印与其关联的subscriberkey列
不管怎样,有没有人对我如何做到这一点有任何意见?重申一下,我只想在df2中添加一列,返回df1中发生或实例的总数
谢谢 您可以尝试:
df2['Total Instances'] = df2['Subscriber Key'].map(df1['Subscriber Key'].value_counts())
你好,非常感谢!这正是我想要的。你能澄清一下我的逻辑是否正确吗。实际上,您正在将我的重复数据帧(df2)映射回df1。那么我的第一个键,在df2中说“abc”,将“绑定”到df1中称为“abc”的每个键上?然后在映射上调用计数?抱歉,只是想了解你的线路是如何运作的太棒了!很高兴这有帮助
value_counts()
返回Series
,您希望将它们映射到键上的df2
。请参考示例我也是:1)通过将键2上的df1到df2中的值映射来创建字典2)通过使用.value_counts()调用匹配值序列每一篇文章,看起来我基本上是在制作一个字典map
:使用输入对应(可以是dict、series或函数)映射序列值。因此,在本例中,df2['Subscriber Key']
和df1['Subscriber Key'].value\u counts()
是两个系列。所以,映射在两个系列上。不过,它必须和键匹配,您可以切换行作为测试示例,然后查看,它也应该给出正确的结果。好的,谢谢!哦,我明白了。还有一个问题,当运行df1['subscriber key'].value_counts()时,我看到它显示了订阅者密钥和计数行,因此在调用.value_counts()时,看起来好像订阅者密钥是分组的?那么,map是否会在我选择返回第三列(计数)的列上获取两个数据帧并“连接”它们呢?抱歉,如果这些是愚蠢的问题