【问题标题】:Pandas distinct count columnPandas 不同计数列
【发布时间】:2016-04-11 02:46:09
【问题描述】:

this 帖子的启发,我想在每个分组中获取数据框中的值的不同计数,并使用数据框中的不同计数值创建一列。 像这样:

原始数据框:

import pandas as pd
df = pd.DataFrame(
    {'A' : ['foo', 'foo', 'foo', 'foo',
            'bar', 'bar', 'bar', 'bar'],
     'B' : ['foo', 'fo', 'foo', 'foo',
        'bar', 'bar', 'ba', 'ba'],
     'C' : [2, 4, 4, 2, 5, 4, 3, 2]})
df

    A       B       C
0   foo     foo     2
1   foo     fo      4
2   foo     foo     4
3   foo     foo     2
4   bar     bar     5
5   bar     bar     4
6   bar     ba      3
7   bar     ba      2

应用链接帖子的方法:

df=df.groupby(['A','B'])['C'].apply(lambda x: len(x.unique()))
df

每个链接发布方法的结果:

A    B  
bar  ba     2
     bar    2
foo  fo     1
     foo    2
Name: C, dtype: int64

想要的结果:

    A       B       C   Distinct Count of C per A and B
0   foo     foo     2             2 
1   foo     fo      4             1 
2   foo     foo     4             2 
3   foo     foo     2             2
4   bar     bar     5             2 
5   bar     bar     4             2
6   bar     ba      3             2
7   bar     ba      2             2 

查看第一行,“A”中的“foo”和“B”中的“foo”的组合有 2 个与之关联的唯一值(2 和 4),因此该组合的每一行中都有一个 2列 A 和 B 的值。

提前致谢!

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    使用transform 而不是apply,因为它返回的列与原始大小相同,我找不到关于原始pandas site 的文档,但来自帮助:

    transform(func, *args, **kwargs) 方法 pandas.core.groupby.SeriesGroupBy 实例
    调用函数在每个组上生成一个类似索引的系列并返回 具有转换值的系列

    df['Distinct Count of C per A and B'] = df.groupby(['A','B'])['C'].transform(lambda x: len(x.unique()))
    
    In [1495]: df
    Out[1495]: 
         A    B  C  Distinct Count of C per A and B
    0  foo  foo  2                                2
    1  foo   fo  4                                1
    2  foo  foo  4                                2
    3  foo  foo  2                                2
    4  bar  bar  5                                2
    5  bar  bar  4                                2
    6  bar   ba  3                                2
    7  bar   ba  2                                2
    

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 2013-09-04
      • 2020-08-19
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2017-11-02
      相关资源
      最近更新 更多