Панды - маска строки и 2-е назначение - PullRequest
1 голос
/ 25 сентября 2019

Возникли некоторые проблемы с пандами, я думаю, что я не использую их должным образом, и мне нужна помощь, чтобы сделать это правильно.

Итак, я получил маску для строк кадра данных, эту маскупростой список логических значенийЯ хотел бы назначить 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.Я скучаю, чтобы дать некоторую информацию об этом.

Спасибо!

1 Ответ

1 голос
/ 25 сентября 2019

Попробуйте:

dataframe[new_or_exist_column]=np.nan
dataframe[new_or_exist_column]=pd.Series(my2darray, index=mask[mask==True].index)

Это даст желаемый результат:

Fun  Data          NewData
0   a    10  [0, 1, 2, 3, 4]
1   b    20              NaN
2   a    30  [4, 3, 2, 1, 0]
...