Я пытался получить самые маленькие строки для группы, следуя методу из этого вопроса .Решение вопроса является правильным до некоторой точки.
В этом примере я группирую столбец A
и хочу вернуть строки C
и D
на основе двух верхних значений в B
.
По какой-то причине индекс grp_df
является многоуровневым и включает в себя A
и исходный индекс ddf
.
Я надеялся просто reset_index()
и удалить нежелательный индекс и просто сохранить A
, но я получаю следующую ошибку:
ValueError: The columns in the computed data do not match the columns in the provided metadata
Вот простой пример, воспроизводящий ошибку:
import numpy as np
import dask.dataframe as dd
import pandas as pd
np.random.seed(42)
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
ddf = dd.from_pandas(df, npartitions=3)
grp_df = ddf.groupby('A')[['B','C']].apply(lambda x: x.nlargest(2, columns=['B']), meta={
"B": 'f8', "C": 'f8'})
# Print is successful and results are correct
print(grp_df.head())
grp_df = grp_df.reset_index()
# Print is unsuccessful and shows error below
print(grp_df.head())