Изменить значения в строках х столбцах - PullRequest
0 голосов
/ 26 сентября 2019

Мне нужна помощь в создании функции для изменения значения определенных строк в определенных столбцах.

Учитывая следующий кадр данных:

serie = [0, 1, 2, 0, 1, 2, 0, 1, 2]
dataX = [0.1, 0.24, 0.21, 0.1, 0.25, 0.2, 0.2, 0.38, 0.49]
dataY = [0.1, 0.23, 0.21, 0.1, 0.27, 0.2, 0.2, 0.38, 0.49]
dataZ = [0.1, 0.26, 0.21, 0.1, 0.25, 0.2, 0.2, 0.49, 0.59]
dataW = [0.1, 0.23, 0.21, 0.1, 0.28, 0.2, 0.2, 0.49, 0.59]

my_dict = {'serie': serie, 
        'dataX': dataX, 
        'dataY': dataY, 
        'dataZ': dataW, 
        'dataW': dataZ}

df_serialized = pd.DataFrame.from_dict(my_dict)

Мне нужно изменить столбцы dataY и dataZ наноль всякий раз, когда значение столбца серии равно нулю.

То, что я уже пробовал:

df_serialized[df_serialized.serie == 0][['dataY', 'dataZ']].apply(np.zeros)

возвращает следующее сообщение об ошибке:

TypeError Traceback (большинствопоследний вызов последним) в () ----> 1 df_serialized [df_serialized.serie == 0] [['dataY', 'dataZ']]. apply (np.zeros)

3 кадра / usr/local/lib/python3.6/dist-packages/pandas/core/frame.py в применении (self, func, axis, широковещательный, необработанный, уменьшение, result_type, args, ** kwds) 6485 args = args, 6486 kwds= kwds) -> 6487 return op.get_result () 6488 6489 def applymap (self, func):

/ usr / local / lib / python3.6 / dist-packages / pandas / core / apply.pyв get_result (self) 149 return self.apply_raw () 150 -> 151 return self.apply_standard () 152 153 def apply_empty_result (self):

/ usr / local / lib / python3.6/dist-packages/pandas/core/apply.py в apply_standard (self) 255 256 # вычислить результат с помощью генератора серий -> 257 self.apply_series_generator () 258 259 # обернуть результаты

/ usr /local / lib / python3.6 / dist-packages / pandas / core / apply.py в apply_series_generator (self) 284 try: 285 для i, v в перечислении (series_gen): -> 286 результатов [i] = self.f(v) 287 keys.append (v.name) 288 за исключением исключения как e:

TypeError: («объект« numpy.float64 »не может быть интерпретирован как целое число», «произошел с индексом dataY ')

1 Ответ

2 голосов
/ 26 сентября 2019
df_serialized.loc[df_serialized.serie == 0, 'dataY'] = 0
df_serialized.loc[df_serialized.serie == 0, 'dataZ'] = 0

или сразу

df_serialized.loc[df_serialized.serie == 0, ['dataZ', 'dataY']] = 0
...