Python-如果数字大于0,则运行平均值

时间:2018-08-06 17:15:17

标签: python python-3.x pandas numpy dataframe

我的数据框中有一列由数字组成。我想在数据框中有另一列,该列的取平均值大于0,而我理想地可以在numpy中执行而无需迭代。 (数据量巨大)

Vals    Output
-350    
1000    1000
1300    1150
1600    1300
1100    1250
1000    1200
450     1075
1900    1192.857143
-2000   1192.857143
-3150   1192.857143
1000    1168.75
-900    1168.75
800     1127.777778
8550    1870

代码:

list =[-350,    1000,   1300,   1600,   1100,   1000,   450,
    1900,   -2000,  -3150,  1000,   -900,   800,    8550]
    df = pd.DataFrame(data = list)

1 个答案:

答案 0 :(得分:5)

选项1
expanding mean

df.assign(out=df.loc[df.Vals.gt(0)].Vals.expanding().mean()).ffill()

如果您的DataFrame中还有其他具有NaN值的列,则此方法也将ffill的那些值,因此,如果您对此有所顾虑,则可以考虑使用类似以下的内容:

df['Out'] = df.loc[df.Vals.gt(0)].Vals.expanding().mean()
df['Out'] = df.Out.ffill()

仅填充Out列。

选项2
mask

df.assign(Out=df.mask(df.Vals.lt(0)).Vals.expanding().mean())

这两个都导致:

    Vals          Out
0   -350          NaN
1   1000  1000.000000
2   1300  1150.000000
3   1600  1300.000000
4   1100  1250.000000
5   1000  1200.000000
6    450  1075.000000
7   1900  1192.857143
8  -2000  1192.857143
9  -3150  1192.857143
10  1000  1168.750000
11  -900  1168.750000
12   800  1127.777778
13  8550  1870.000000