У меня есть таблица с несколькими столбцами чисел. Я пытаюсь получить статистику для этой таблицы, и я застрял, пытаясь подсчитать количество положительных повышений между строками в одном столбце.
что я имею
A | B | C
--------------
1 | 5 | 2
5 | 2 | 7
2 | 2 | 10
18 | 0 | 14
функция, которую я пытаюсь написать для своей проблемы
def countIncreace(data,value): #not complete but what I have so far
print( data[value].pct_change().fillna(0).count( > 0) )
pct_change()
возвращает таблицу процента от числа в этом индексе по сравнению с числом в строке перед ним, а fillna(0)
заменяет NaN
в позиции 0 диаграммы, pct_change()
создает pct_change()
с 0
мой желаемый результат:
[IN]>countIncreace(df, 'A'):
[OUT]> 2
[IN]>countIncreace(df, 'B'):
[OUT]> 0
[IN]>countIncreace(df, 'C'):
[OUT]> 3
Что мне не хватает в моей функции, чтобы получить количество положительных значений
Очень близко! Все правильно, за исключением того, как вы пытаетесь подсчитать количество процентов, превышающих 0. Вот один из способов сделать это
def countIncrease(df,column):
print sum(df[column].pct_change().fillna(0) > 0)
Вы можете использовать методы pd.Series
gt
(больше) и sum
:
df[column].pct_change().fillna(0).gt(0).sum()
В общем, это лучшая идея, чем использование встроенных функций с массивами Pandas series/NumPy.
Вы можете использовать DataFrame.loc
len(df.loc[df.A > 0]
Пример:
df = pd.DataFrame(np.random.randint(-10, 10, (3, 3)), columns=list('ABC'))
print(len(df.loc[df.A > 0]))
Или просто [
]
:
print(len(df[df.A > 0]))