我的数据框中有一列由数字组成。我想在数据框中有另一列,该列的取平均值大于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)
答案 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