这是代码
import dask.dataframe as dd
import pandas as pd
df = pd.DataFrame({
'col1' : ['A', 'A', 'E', np.nan, 'D', 'C','B','C'],
'col2' : [2, 1, 9, 8, 7, 4,10,5],
'col3': [0, 1, 9, 4, 2, 3,1,2],
'col4': [11,12,12,13,14,55,56,22], })
out_1=df.loc[::-1,"col4"]
dd_df=dd.from_pandas(df,npartitions=5)
out_2=dd_df.loc[::-1,"col4"]
#out_2 throws an error
我知道Dask的工作方式与熊猫不同。如何使用DASK获得与out_1
相同的输出?
您可以颠倒分区的顺序,也可以安排一个作业来颠倒每个分区内的行顺序,如下所示:
In [30]: rev_df = dd.concat(
...: [df.partitions[i] for i in range(df.npartitions - 1, -1, -1)]
...: ).map_partitions(lambda x: x[::-1], meta=df)
...:
In [31]: rev_df.compute()
Out[31]:
col1 col2 col3 col4
7 C 5 2 22
6 B 10 1 56
5 C 4 3 55
4 D 7 2 14
3 NaN 8 4 13
2 E 9 9 12
1 A 1 1 12
0 A 2 0 11
这将以与列或系列相同的方式工作:
rev_col1 = dd.concat(
[
df["col1"].partitions[i]
for i in range(df.npartitions - 1, -1, -1)
]
).map_partitions(lambda x: x[::-1], meta=df["col1"])