python - Groupby.transform 在 dask 数据帧中不起作用

标签 python python-3.x pandas dataframe dask

我正在使用以下 dask.dataframe AID:

   AID FID  ANumOfF
0    1   X        1
1    1   Y        5
2    2   Z        6
3    2   A        1
4    2   X       11
5    2   B       18

我知道在 pandas 数据框中我可以使用:

AID.groupby('AID')['ANumOfF'].transform('sum')

得到:

0     6
1     6
2    36
3    36
4    36
5    36

我想对 dask.dataframes 使用相同的功能,它通常使用与 pandas 数据框相同的功能,但在这种情况下会出现以下错误:

AttributeError: 'SeriesGroupBy' object has no attribute 'transform'

这可能是以下两种情况之一,要么是 dask 不支持它,要么是因为我使用的是 python 3?

我尝试了以下代码:

AID.groupby('AID')['ANumOfF'].sum()

但这只是给我每个组的总和:

AID
1     6
2    36

我需要它像上面那样在每一行中重复一个总和。我的问题是,如果不支持转换,是否有其他方法可以获得相同的结果?

最佳答案

我想你可以使用 join :

s = AID.groupby('AID')['ANumOfF'].sum()
AID = AID.set_index('AID').drop('ANumOfF', axis=1).join(s).reset_index()
print (AID)
   AID FID  ANumOfF
0    1   X        6
1    1   Y        6
2    2   Z       36
3    2   A       36
4    2   X       36
5    2   B       36

或使用 map 更快的解决方案通过聚合 Seriesdict:

s = AID.groupby('AID')['ANumOfF'].sum()
#a bit faster
#s = AID.groupby('AID')['ANumOfF'].sum().to_dict()
AID['ANumOfF'] = AID['AID'].map(s)
print (AID)
   AID FID  ANumOfF
0    1   X        6
1    1   Y        6
2    2   Z       36
3    2   A       36
4    2   X       36
5    2   B       36

关于python - Groupby.transform 在 dask 数据帧中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43207926/

相关文章:

python - "UPDATE"处或附近的 psycopg2 语法错误

python - 从矩阵列表中删除重复矩阵

python - Pandas 有条件地复制单元格值

python - 将 numpy runtimewarning 捕获为异常并抑制它们

python - Pygame 中的动画故障

python - 使用 openpyxl 模块写入电子表格会创建损坏的电子表格,如何使用 zipfile 模块修复?

Python telnet 连接失败

python - 如何使用字典替换 Pandas 系列中的多个子字符串?

python - 如何将 3 个相同维度的数据帧相交并输出至少 2 个数据帧中常见的数据帧

python - Python 2.7 中的断言对我不起作用示例 assertIn