Заполнение NAs при объединении фреймов данных Dask

#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). Как и в моем случае, для создания правильного кадра данных требуется много вычислений, я действительно хочу избежать дополнительного шага вычисления и иметь возможность завершить его за один прогон.

Любое предложение будет оценено по достоинству.