如何使用熊猫获取增加值的平均值?

时间:2018-08-24 17:34:19

标签: python python-3.x pandas

我试图找出表格中每列的增加值的平均值。

我的桌子

 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)替换图表{{ 1}}使用0创建。NaN返回true或false表,具体取决于该索引处的值是否大于0

此功能的当前输出

pct_change()

所需的输出

gt(0)

根据我对熊猫的有限了解,应该有一种方法可以返回所有正确的索引数组,然后使用for循环并遍历原始数据表,但是我认为熊猫应该有一种方法可以做到这一点没有for循环。

我认为for循环的方式看起来会加上缺少的代码,因此返回的索引是正确的,而不是每个索引

In[1]:avergeIncreace(df,'A')
Out[1]:  0    False
         1    True
         2    False
         3    True
         Name: BAL, dtyle: bool

如何在函数中不使用for循环的情况下实现所需的输出?

2 个答案:

答案 0 :(得分:3)

您可以使用mask()diff()

df.diff().mask(df.diff()<=0, np.nan).mean().fillna(0)

收益:

A    75.0
B     0.0
C    10.0
dtype: float64

答案 1 :(得分:2)

怎么样

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [0, 100, 50, 100],
                   'B': [5, 2, 2, 0],
                   'C': [10, 20, 30, 40]})

def averageIncrease(df, col_name):
    # Create array of deltas. Replace nan and negative values with zero
    a = np.maximum(df[col_name] - df[col_name].shift(), 0).replace(np.nan, 0)
    # Count non-zero values
    count = np.count_nonzero(a)

    if count == 0:
        # If only zero values… there is no increase
        return 0
    else:
        return np.sum(a) / count


print(averageIncrease(df, 'A'))
print(averageIncrease(df, 'B'))
print(averageIncrease(df, 'C'))
75.0
0
10.0