Я пытаюсь вычислить среднее значение увеличивающихся значений в моей таблице на столбец.
мой стол
A | B | C
----------------
0 | 5 | 10
100 | 2 | 20
50 | 2 | 30
100 | 0 | 40
функция, которую я пытаюсь написать для моей проблемы
def avergeIncreace(data,value): #not complete but what I have so far
x = data[value].pct_change().fillna(0).gt(0)
print( x )
pct_change()
возвращает таблицу процентного значения числа с этим индексом по сравнению с числом в строке перед ним. fillna(0)
заменяет NaN
в позиции 0 диаграммы, которую pct_change()
создает с 0. gt(0)
возвращает таблицу true или false в зависимости от того, превышает ли значение этого индекса значение 0
токовый выход этой функции
In[1]:avergeIncreace(df,'A')
Out[1]: 0 False
1 True
2 False
3 True
Name: BAL, dtyle: bool
желаемый вывод
In[1]:avergeIncreace(df,'A')
Out[1]:75
In[2]:avergeIncreace(df,'B')
Out[2]:0
In[3]:avergeIncreace(df,'C')
Out[3]:10
Из моего ограниченного понимания панд должен быть способ вернуть массив всех истинных индексов, а затем использовать цикл for и пройти через исходную таблицу данных, но я считаю, что у панд должен быть способ сделать это без петли.
то, что я думаю, выглядит для цикла for плюс отсутствующий код, поэтому возвращаются индексы, которые имеют значение true вместо каждого индекса
avergeIncreace(df,'A')
indexes = data[value].pct_change().fillna(0).gt(0).index.values #this returns an array containing all of the index (true and false)
answer = 0
times = 0
for x in indexes:
answer += (data[value][x] - data[value][x-1])
times += 1
print( answer/times )
Как добиться желаемого результата без использования цикла for в функции?