#python #dataframe #dask-dataframe
Вопрос:
Я пытаюсь выполнить соединение слева на двух кадрах данных Dask. В дополнение к обычному соединению я хотел бы заполнить NAs результатов любым значением из правильного кадра данных.
import pandas as pd import dask.dataframe as dd a = pd.DataFrame({'index':[1, 2, 3], 'key': ['A', 'B', 'C']}) left = dd.from_pandas(a, npartitions=1).set_index('index') b = pd.DataFrame({'index':[1, 2], 'type': ['X', 'Y']}) right = dd.from_pandas(b, npartitions=1).set_index('index')
слева и справа находятся два кадра данных.
Слева:
key index 1 A 2 B 3 C
Правильно:
type index 1 X 2 Y
Чего я хочу, так это
key type index 1 A X 2 B Y 3 C X
или
key type index 1 A X 2 B Y 3 C Y
И то, и другое будет работать для меня, и мне на самом деле все равно, будет ли это » X » или » Y «для индекса 3 для «типа», пока значение существует в правильном кадре данных.
Возможно, существует несколько строк или даже все строки, которые не могут быть объединены с помощью правильного фрейма данных. В этом случае мне все равно просто нужно, чтобы значение » тип » было из любого правильного кадра данных.
Один из способов сделать это -:
res = left.merge(right, how='left', left_index=True, right_index=True) res = res.fillna(value=right['type'].head(1).to_numpy()[0])
Однако для этого требуется дополнительный расчет Dask для головной части(1). Как и в моем случае, для создания правильного кадра данных требуется много вычислений, я действительно хочу избежать дополнительного шага вычисления и иметь возможность завершить его за один прогон.
Любое предложение будет оценено по достоинству.