如果行中的条目具有相同的属和值,我要计算唯一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
任何帮助将不胜感激。
答案 0 :(得分:1)
您要在genus
和value
上进行分组。使用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