Как заменить значения диапазона столбцов Pandas DataFrame их абсолютным / средним значением? - PullRequest
1 голос
/ 09 октября 2019

Я хочу заменить значения столбца Pandas DataFrame его значением в форме диапазона в каждой ячейке, рассчитав его абсолютное / среднее значение.

Значения столбца: следующая ячейка «46-55» следующаязначение ячейки «26-35», а значение следующей ячейки «100+» (без кавычек)

Пример ввода: pandas.core.series.Series ('46 -55 ', '26 -35','60 + ')

пример входного изображения

Ожидаемый результат: pandas.core.series.Series ('50 .5', '30.5', '60')

пример выходного изображения

, где 50,5 - среднее значение 46 и 55

Ответы [ 2 ]

0 голосов
/ 09 октября 2019
>>> import pandas as pd

Вход

# assuming there is no noise data in age_range (ex. no special char other than -,+)
>>> age_range = pd.Series(('46-55', '26-35', '60+'))
>>> age_range
0    46-55
1    26-35
2      60+
dtype: object

Функция для преобразования диапазона str в список диапазонов int

>>> split_range = lambda age_range : [[int(y) for y in x.split('-')] if len(x.split('-')) == 2 else [int(x.split('+')[0])] for x in age_range]

# test func
>>> alter_age_range = split_range(age_range)
>>> alter_age_range
[[46, 55], [26, 35], [60]]

Выход

>>> ages_mean = pd.Series([sum(ages)/len(ages) for ages in split_range(age_range)])
>>> ages_mean
0    50.5
1    30.5
2    60.0
dtype: float64
0 голосов
/ 09 октября 2019
a = pd.Series(['46-55', '26-35', '60+'])
>>>a
0    46-55
1    26-35
2      60+
dtype: object

Мы можем непосредственно найти все числа в строке каждой ячейки и вывести все это как отдельный ряд

b = a.str.findall('(\d+)')
>>>b
0    [46, 55]
1    [26, 35]
2        [60]
dtype: object

Теперь мы можем найти среднее значение каждого элемента нового ряда, котороемы только что создали и вывели его в виде требуемой серии

c = pd.Series([])
for i in range(0,len(b)):
    b[i] = np.array(b[i]).astype(np.float)
    c[i] = sum(b[i]) / len(b[i])

>>>c
0    50.5
1    30.5
2    60.0
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...