Python 3.x 如果其他两列的行相同,则第三列中的唯一项计数相同

Python 3.x 如果其他两列的行相同,则第三列中的唯一项计数相同,python-3.x,pandas,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

如果行中的条目具有相同的属和值,我想计算唯一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和pivot表,但由于合并了这么多条件,我在介绍中遇到了麻烦

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)

我在找这样的东西:

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

任何帮助都将不胜感激。

您想在
上分组。使用文本的评论并将其转换为您想要的输出:

df=df.groupby(['value','genus']).id.nunique().to_frame()
身份证件
价值属
1010室1
亚迪2号
1230雅达3
1240黄色3
2310黄色1
4550亚迪1
6547亚达1
reset_index(drop=False).rename({'id':'count'},axis=1)
值亏格计数
0 1010 vroom 1
1010亚迪2
21230雅达3
311240黄色3
42310黄色1
54550亚迪1
66547亚达1
simple fix
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