Я пытаюсь выяснить среднее значение увеличения значений в моей таблице для каждого столбца.
мой стол
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)
возвращает истинную или ложную таблицу в зависимости от того, является ли значение в этом индекс больше 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
Из моего ограниченного понимания pandas должен быть способ вернуть массив всех индексов, которые верны, а затем использовать цикл for и пройти через исходную таблицу данных, но я считаю, что у pandas должен быть способ сделать это без for петля.
что, я думаю, будет выглядеть цикл for плюс отсутствующий код, поэтому возвращаемые индексы являются истинными, а не каждым индексом
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 в функции?