Условное увеличение определенных значений строк - Pandas - PullRequest
0 голосов
/ 08 мая 2020

У меня есть набор данных, содержащий столбец значений, однако некоторые строки в столбце содержат выбросы (например, -999,999 или 999,999) из-за системной ошибки, которую я хотел бы попытаться исправить в Pandas.

Исходный набор данных выглядит следующим образом:

Value Column
-2092.925951
910.9736
-910.9736
-2024.96475
-2024.96475
999947.438 - (outlier)
67.4672
-999993.313 - (outlier)
9.8603
49.5318
17.5591

Я хотел бы добавить 1000000 только к строкам с числами от -800000 до -999999 и вычесть 1000000 из строк с числами от 800000 до 999999.

Пример желаемого набора данных ниже:

Value Column
-2092.925951
910.9736
-910.9736
-2024.96475
-2024.96475
-52.562 - (fixed outlier with 999,947.438 - 1,000,000)
67.4672
6.687 - (fixed outlier with -999,993.313 + 1,000,000)
9.8603
49.5318
17.5591

Любая помощь или идеи приветствуются!

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Учитывая Value Column как VC

In [8]: l = [-2092.925951,910.9736,-910.9736,-2024.96475,-2024.96475,
   ...: 999947.438,67.4672,-999993.313,9.8603,49.5318,17.5591,]

In [9]: df = pd.DataFrame.from_dict({'VC':l})

In [10]: def check(value):
    ...:     if value > 10000:
    ...:         return value-1000000
    ...:     elif value < -10000:
    ...:         return -1000000-value
    ...:     return value
    ...: 
    ...: df['VC'] = df.apply(lambda row: check(row['VC']), axis=1)
    ...: 

In [11]: df
Out[11]: 
             VC
0  -2092.925951
1    910.973600
2   -910.973600
3  -2024.964750
4  -2024.964750
5    -52.562000
6     67.467200
7     -6.687000
8      9.860300
9     49.531800
10    17.559100
1 голос
/ 08 мая 2020
(
    df.assign(l=df['Value Column'].between(800000,999999)*-1000000)
    .assign(s=df['Value Column'].between(-999999,-800000)*1000000)
    .apply('sum', axis=1)
)

0    -2092.925951
1      910.973600
2     -910.973600
3    -2024.964750
4    -2024.964750
5      -52.562000
6       67.467200
7        6.687000
8        9.860300
9       49.531800
10      17.559100
dtype: float64
...