Python,计算另一列中值的出现频率

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'

所以我一直在寻找类似问题的解决方案,并不断碰壁。我是python新手,使用pandas/python进行ETL,如果我没有充分描述我的情况,请原谅

我有两个数据帧df1看起来像:

    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是否会在我选择返回第三列(计数)的列上获取两个数据帧并“连接”它们呢?抱歉,如果这些是愚蠢的问题