Using GroupBy and value_counts



我需要一些熊猫方面的帮助。我有一个DataFrame,它有一列唯一的ID,每个ID都下载了一些不同的应用程序。

ID | AppID | Count
1  |  A    |   2
2  |  A    |   3
3  |  B    |   1
4  |  D    |   1
5  |  E    |   5

我正在尝试按ID分组,并计算每个ID的appID总数。

预期输出:

ID | A | B | C | D | E....
1  | 2 | 0 | 1 |  8 |  5
2  | 3 | 6 | 7 |  4 |  6  
3  | 9 | 1 | 2 |  5 |  7
4  | 3 | 8 | 4 |  1 |  3
5  | 1 | 1 | 3 |  5 |  5

我尝试过的代码是

t = df.groupby(['ID']).agg({i:'value_counts' for i in df.columns[1:]})

pd.crosstab(index=t['ID'], columns=t['count'])

我得到的结果

ID | AppID | Count
1  |  A    |   2
1  |  B    |   0
1  |  C    |   1
1  |  D    |   8
1  |  E    |   5
2  |  A    |   3
2  |  B    |   6
2  |  C    |   7
2  |  D    |   4
2  |  E    |   6

如果您希望汇总Count值,请尝试:

df.groupby(['ID', 'AppID'])['Count'].sum().unstack(fill_value=0)

如果您想要的是行数(给定ID中每个AppID出现的次数(,而不管您的Count列如何,请尝试:

df.groupby(['ID', 'AppID']).count().unstack(fill_value=0)

在这两种情况下,该值的建立方式与原始解决方案非常相似(但仅使用矢量化操作(,然后使用.unstack()将其转换为宽df。

最新更新