python - Dask: Groupby 和 'First'/'Last' in agg

标签 python pandas-groupby dask

我想按单个列分组,然后对几列使用 agg 和均值,但只需选择 firstlast对于其余的列。这在 Pandas 中是可能的,但目前在 Dask 中不受支持。这个怎么做?谢谢。

aggs = {'B': 'mean', 'C': 'mean', 'D': 'first', 'E': 'first'}
ddf.groupby(by='A').agg(aggs)

最佳答案

您可以使用 dask.dataframe.DataFrame.drop_duplicates然后加入聚合DataFrame:

df = pd.DataFrame({'F':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'A':list('aaabbb')})

print (df)
   A  B  C  D  E  F
0  a  4  7  1  5  a
1  a  5  8  3  3  b
2  a  4  9  5  6  c
3  b  5  4  7  9  d
4  b  5  2  1  2  e
5  b  4  3  0  4  f

from dask import dataframe as dd 
ddf = dd.from_pandas(df, npartitions=3)
#print (ddf)


c = ['B','C']
a = ddf.groupby(by='A')[c].mean()
b = ddf.drop(c, axis=1).drop_duplicates(subset=['A'])
df = b.join(a, on='A').compute()
print (df)
   A  D  E  F         B    C
0  a  1  5  a  4.333333  8.0
3  b  7  9  d  4.666667  3.0

关于python - Dask: Groupby 和 'First'/'Last' in agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48961304/

相关文章:

python - IF else 在 Panda 中基于数据框列值

python - 动态调用方法名?

python - 替换数组中的负数,Python

python - 如何使用 pandas groupby 对某些行进行降序排序,对某些行进行升序排序

pandas - 如果另一列中的值较差,则汇总一列(不使用 for 循环)

python - 如何使用 Dask 在 read_sql_table 中使用 sqlalchemy 表达式?

python - 如何查看 dask 图的实时执行?

python - 延时函数解包结果

python - 使用 lambda 函数嵌套 for 循环

python - Windows命名管道: detect in Python on writer side when reader has closed its end without having to write data