我需要一些熊猫方面的帮助。我有一个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。