Возникли некоторые проблемы с пандами, я думаю, что я не использую их должным образом, и мне нужна помощь, чтобы сделать это правильно.
Итак, я получил маску для строк кадра данных, эту маскупростой список логических значенийЯ хотел бы назначить 2D-массив новому или существующему столбцу.
mask = some_row_mask()
my2darray = some_operation(dataframe.loc[mask, column])
dataframe.loc[mask, new_or_exist_column] = my2darray
# Also tried this
dataframe.loc[mask, new_or_exist_column] = [f for f in my2darray]
Пример данных:
dataframe = pd.DataFrame({'Fun': ['a', 'b', 'a'], 'Data': [10, 20, 30]})
mask = dataframe['Fun']=='a'
my2darray = [[0, 1, 2, 3, 4], [4, 3, 2, 1, 0]]
column = 'Data'
new_or_exist_column = 'NewData'
Ожидаемый вывод
Fun Data NewData
0 a 10 [0, 1, 2, 3, 4]
1 b 20 NaN
2 a 30 [4, 3, 2, 1, 0]
dataframe [маска] и my2darray имеют одинаковое количество строк, но всегда заканчиваются:
ValueError: Mus имеют одинаковые ключи len и значение при установке с помощью ndarray.
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ - В контексте:
Я просто добавил некоторые точности, это было сделано для поэтапного заполнения сгибов: я вычисляю и устанавливаю некоторые значения из вложенной части фрейма данных.Вместо этого, согласно Parth:
dataframe[new_or_exist_column]=pd.Series(my2darray, index=mask[mask==True].index)
я изменил на это:
dataframe.loc[mask, out] = pd.Series([f for f in features], index=mask[mask==True].index)
В противном случае все уже установленные значения перезаписываются значениями NaN.Я скучаю, чтобы дать некоторую информацию об этом.
Спасибо!