2015-05-14 2 views
0

У меня есть панд dataframe, и я могу выбрать столбец, я хочу посмотреть на с:Вычислить числовое значение в виде строки в пределах столбца панды

column_x = str(data_frame[4]) 

Если я печатаю column_x, я получаю:

0  AF1000g=0.09 
1  AF1000g=0.00 
2  AF1000g=0.14 
3  AF1000g=0.02 
4  AF1000g=0.02 
5  AF1000g=0.00 
6  AF1000g=0.54 
7  AF1000g=0.01 
8  AF1000g=0.00 
9  AF1000g=0.04 
10 AF1000g=0.00 
11 AF1000g=0.03 
12 AF1000g=0.00 
13 AF1000g=0.02 
14 AF1000g=0.00 
... 

Я хочу подсчитать, сколько строк содержит значения AF1000g = 0.05 или меньше. А также строки, содержащие значения AF1000g = 0,06 или выше.

Less_than_0.05 = count number of rows with AF1000g=0.05 and less 

Greater_than_0.05 = count number of rows with AF1000g=0.06 and greater  

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

спасибо.

Родриго

+0

Было бы неплохо иметь столбец AF1000g и сделать значения единственными в столбце. Это должно быть вашей проблемой, и тогда все остальные вещи придут легко. –

ответ

1

Вы можете использовать apply для извлечения числовых значений, и сделать подсчет там:

vals = column_x.apply(lambda x: float(x.split('=')[1])) 
print sum(vals <= 0.05) #number of rows with AF1000g=0.05 and less 
print sum(vals >= 0.06) #number of rows with AF1000g=0.06 and greater 
1

Комментарий выше делает хорошую точку. Обычно перед анализом следует сосредоточиться на анализе.

Тем не менее, это не слишком сложно. Используйте pd.Series.str.extract с регулярным выражением, затем принудительно поплавок, затем выполните операции над этим.

floats = column_x.str.extract("^AF1000g=(.*)$").astype(float) 
num_less = (vals <= 0.05).sum() 
num_greater = (vals > 0.05).sum() 

Это имеет преимущество в том, что логический массив, возвращаемый сравнению с vals может быть принужден к 0 и 1.

+0

Спасибо, ребята. Ваши предложения хорошо работали! –

Смежные вопросы