我试图找出表格中每列的增加值的平均值。
我的桌子
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循环的情况下实现所需的输出?
答案 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