我想要做的是在dask中复制panda的值计数+ idxmax函数,因为我有很多数据。以下是一个示例数据框:
partner_num cust_id item_id revw_ratg_num revw_dt item_qty
0 100 01 5 05/30/2000 0
0 100 03 5 05/30/2000 0
0 100 02 5 05/30/2000 0
1 200 13 4 04/01/2000 0
1 200 14 5 04/01/2000 1
2 200 22 2 04/01/2000 1
3 200 37 3 04/01/2000 1
9 300 92 1 03/24/2000 1
9 300 93 1 03/24/2000 1
9 300 94 1 03/24/2000 0
9 300 99 1 03/24/2000 0
6 300 91 2 03/24/2000 0
>>>df.head()
partner_num cust_id item_id revw_ratg_num revw_dt item_qty
0 0 100 1 5 05/30/2000 0
1 0 100 3 5 05/30/2000 0
2 0 100 2 5 05/30/2000 0
3 1 200 13 4 04/01/2000 0
4 1 200 14 5 04/01/2000 1
在熊猫中你可以这样做:
df = pd.read_csv("fake_data.txt", sep="\t")
df.groupby(["cust_id"]).item_qty.value_counts()
cust_id item_qty
100 0 3
200 1 3
0 1
300 0 3
1 2
但是,当你在Dask中做同样的事情时,它会失败,抛出属性错误
df1 = dd.read_csv("fake_data.txt", sep="\t")
df1.groupby(["cust_id"]).item_qty.value_counts()
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
df1.groupby(["cust_id"]).item_qty.value_counts()
AttributeError: 'SeriesGroupBy' object has no attribute 'value_counts''
我真正想要做的是能够在Dask中的多列组之后获取这两个值以及它们的出现次数。任何替代解决方案都是可以接受的,我只想完成工作!
答案 0 :(得分:5)
value_counts
。使用apply
来获得所需的结果。
请注意,系列方法支持value_counts
。
>>> df1.groupby(['cust_id']).item_qty.apply(lambda x: x.value_counts()).compute()
cust_id
100 0 3
200 1 3
0 1
300 0 3
1 2
Name: item_qty, dtype: int64