【问题标题】:Python, count frequency of occurrence for value in another columnPython,计算另一列中值的出现频率
【发布时间】:2017-09-24 20:30:36
【问题描述】:

所以我一直在搜索 stackoverflow 以寻找类似问题的解决方案,并不断碰壁。我是 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'

df2 看起来像:

    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'

所以我所做的就是尝试使用这一行:

    df1.groupby(['SubscriberKey']).size()

我只使用 'SubscriberKey' 的原因是因为有些行只有该列填写了 'OtherID' 和 'AnotherID' 空白。

我也尝试过 Series.value_count()。当我尝试使用 groupby 和 size() 并将 df2['Total Instances'] 的值设置为出现次数时,这些值似乎没有正确排列。

例如,新表如下所示:

    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 中出现或实例的总数。

谢谢!

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    你可以试试:

    df2['Total Instances'] = df2['Subscriber Key'].map(df1['Subscriber Key'].value_counts())
    

    【讨论】:

    • 您好,非常感谢!这正是我想要的。您能否澄清我的逻辑是否正确。本质上,您将我的重复数据帧 (df2) 映射回 df1。所以我的第一个键,比如 df2 中的“abc”,会与 df1 中每个名为“abc”的键“绑定”吗?然后在映射上调用计数?抱歉,只是想了解一下您的线路是如何工作的
    • 太棒了!很高兴它有帮助。 value_counts() 返回 Series 并且您想将它们映射到 Key 上的 df2。请参考示例pandas.pydata.org/pandas-docs/stable/generated/…
    • so am i: 1)通过将 df1 中的值映射到键 2 上的 df2 来创建字典)使用 .value_counts() 调用一系列匹配值 根据文章,我似乎本质上是在制作字典
    • map:使用输入对应关系(可以是字典、系列或函数)映射系列的值。所以,在这种情况下,df2['Subscriber Key']df1['Subscriber Key'].value_counts() 是两个Series。因此,映射在两个系列上。但是,它必须与键匹配,您可以为测试示例切换行,看看,它也应该给出正确的结果。
    • 好的,谢谢!哦,我明白了。所以另一个问题,当只运行 df1['subscriber key'].value_counts() 时,我看到它显示了订阅者密钥和计数行,所以当我调用 .value_counts() 时看起来订阅者密钥是分组的?那么 map 是否需要两个数据框并将它们“加入”到我选择返回第三列(计数)的列上?对不起,如果这些是愚蠢的问题
    猜你喜欢
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2014-04-18
    • 2022-11-28
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多