Возможно, это не самое эффективное решение, но, насколько я понимаю, оно выполнило свою работу:
import pandas as pd
import numpy as np
test = pd.DataFrame({'A': ['a', 'b', 'b', 'b'], 'B': [1, 2, 3, 4],
'C': [np.nan, np.nan, np.nan, np.nan],
'D': [np.nan, np.nan, np.nan, np.nan]})
input_b = {2: ['Moon', 'Elephant'], 4: ['Sun', 'Mouse']}
for key, value in input_b.items():
test.loc[test['B'] == key, ['C', 'D']] = value
print(test)
Выход:
A B C D
0 a 1 NaN NaN
1 b 2 Moon Elephant
2 b 3 NaN NaN
3 b 4 Sun Mouse
Это будет медленнее, если словарьinput_b
становится слишком большим (слишком много строк обновляется, слишком много итераций в цикле for), но должно быть относительно быстрым с маленькими input_b
даже с большими test
фреймами данных.
ЭтоВ ответе также предполагается, что ключи в словаре input_b
ссылаются на значения столбца B
в исходном кадре данных и будут добавлять повторяющиеся значения в столбцы C
и D
для повторяющихся значений в столбце B
..