Сравните значение строки для дублирования в соседних столбцах в цикле, чтобы очистить данные в пандах - PullRequest
1 голос
/ 08 октября 2019

Сводка

0   101 2017/11 -9999.0 -7.60   -4.00   -9999.0 -9999.0 -4.00   -0.22   1.76    4.64    6.98    8.96    12.56   15.98   19.58   22.46   25.34   28.40   
1   101 2017/11 -9999.0 -7.78   -4.36   -9999.0 -9999.0 -4.36   -0.22   1.76    4.64    6.80    8.78    12.56   15.98   19.58   22.46   25.16   28.22
2   101 2017/11 -9999.0 -7.60   -4.18   -9999.0 -9999.0 -4.18   -0.22   1.76    4.46    6.80    8.78    12.56   15.98   19.58   22.46   25.16   28.22   
3   101 2017/11 -9999.0 -7.96   -5.26   -9999.0 -9999.0 -5.26   -0.40   1.76    4.46    6.80    8.60    12.38   15.98   19.58   22.46   25.16   28.22   
4   101 2017/11 -9999.0 -6.88   -4.36   -9999.0 -9999.0 -4.36   -0.40   1.58    4.46    6.80    8.60    12.38   15.98   19.58   22.46   25.16   28.22   
5   101 2017/11 20.30   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06
6   101 2017/11 19.76   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06
7   101 2017/11 20.30   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06   35.06

Мне нужно иметь возможность удалить данные из столбцов, в которых соседний столбец имеет одинаковое точное число. Таким образом, в этом примере столбцы 5, 6 и 7 будут выглядеть следующим образом:

5 2017/11   20.30   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     
6 2017/11   19.76   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     
7 2017/11   20.30   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     

То, что я пробовал

Множество ответов, которые я нашел, похоже, преобразуются и затем указывают на логическое значениестоимость.

я рассматривал что-то вроде этого псевдокода, чтобы проверить соседние столбцы

for i, row in data.iterrows():
    rowvar = i
    if data.iloc[i] == rowvar:
        data.iloc[i] = np.nan

, но это, очевидно, не работает.

Фактически

ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types

Есть ли простой способ сделать это, возможно, более Pythonic / Pandas?

Ответы [ 2 ]

1 голос
/ 09 октября 2019

pandas.diff() действительно правильная функция для вас. Однако вам нужно проверить по столбцам в обоих направлениях , равны ли значения или нет. Этот код устанавливает все значения на NaN, если предыдущий или следующий столбец имеют такое же значение:

import numpy as np
data[np.logical_or(data.diff(axis=1) == 0, data.diff(axis=1, periods=-1) == 0)] = np.nan
0 голосов
/ 08 октября 2019

Я бы порекомендовал поискать метод diff() на pd.DataFrame. Я верю, что это даст вам направление относительно того, как решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...