给定其他两列的行相同,请计算第三列中的唯一条目

时间:2019-03-26 21:07:12

标签: python-3.x pandas

如果行中的条目具有相同的属和值,我要计算唯一ID的总数。

id    genus   value
123    yadi  1010
234    yada  1230
345  yellow  1240
123    yadi  1010
234    yada  1230
345  yellow  1240
456   vroom  1010
789    yada  1230
101  yellow  1240
121    yadi  1010
141    yada  1230
123  yellow  1240
234    yadi  4550
516    yada  6547
170  yellow  2310

我尝试过使用groupby和数据透视表,但是由于引入了这么多条件而在入门中遇到了麻烦。

df = pandas.DataFrame({'id': [123, 234, 345, 123, 234, 345, 456, 789, 101, 121, 141, 123, 234, 516, 170],
                       'genus': ['yadi', 'yada', 'yellow', 'yadi', 'yada', 'yellow', 'vroom', 'yada', 'yellow','yadi', 'yada', 'yellow','yadi', 'yada', 'yellow'],
                       'value': [1010, 1230, 1240, 1010, 1230, 1240, 1010, 1230, 1240, 1010, 1230, 1240, 4550, 6547, 2310]})

df.pivot_table(values='genus', index='value', columns='id', aggfunc=pandas.Series.nunique)

df.groupby('value')['genus', 'id'].nunique()

我正在寻找这样的东西:

value   genus   count
1010    yadi    2
1010    vroom   1
1230    yada    3
1240    yellow  4
4550    yadi    1
6547    yada    1
2310    yellow  1

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您要在genusvalue上进行分组。使用Wen-Ben的注释并将其转换为所需的输出:

df = df.groupby(['value', 'genus']).id.nunique().to_frame()

                id
value   genus   
1010    vroom   1
        yadi    2
1230    yada    3
1240    yellow  3
2310    yellow  1
4550    yadi    1
6547    yada    1

df.reset_index(drop=False).rename({'id':'count'}, axis=1)

    value   genus   count
0   1010    vroom   1
1   1010    yadi    2
2   1230    yada    3
3   1240    yellow  3
4   2310    yellow  1
5   4550    yadi    1
6   6547    yada    1