Ian*_*Ian 5 python dask pandas-groupby
我想对单个列进行分组,然后agg
对几列使用平均值,但只选择first
或last
对其余列。这在 pandas 中是可能的,但目前在 Dask 中不支持。这个怎么做?谢谢。
aggs = {'B': 'mean', 'C': 'mean', 'D': 'first', 'E': 'first'}
ddf.groupby(by='A').agg(aggs)
Run Code Online (Sandbox Code Playgroud)
您可以使用dask.dataframe.DataFrame.drop_duplicates
然后 join 来聚合 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1046 次 |
最近记录: |