我有一个像这样的数据框:
pk_dcdata threshold last_ep diff
window
1 11075761 0.00001 4 3
1 11075768 0.00001 7 6
2 11075769 0.00001 1 -1
2 11075770 0.00001 1 -1
3 11075771 0.00001 1 0
3 11075768 0.00001 7 6
我要计算“ diff”列中的平均值,但要与索引“ window”进行比较,然后将平均值保存到新列表中。例如window = 1,平均值是(3 + 6)/ 2,下一个是window = 2,所以(-1-1)/ 2依此类推。
预期结果:list = [4.5,-1,3]
我尝试使用'rolling_mean',但不知道如何设置移动长度。由于数据集很大,因此希望可以快速获得结果。
答案 0 :(得分:2)
不要使用list
作为变量,因为python保留了字。
需要按每个索引mean
进行汇总,最后将Series
转换为list
:
L = df.groupby(level=0)['diff'].mean().tolist()
#alternative
#L = df.groupby('window')['diff'].mean().tolist()
print (L)
[4.5, -1.0, 3.0]
在pandas 0.20.0+
中替代工作,请选中docs。
答案 1 :(得分:0)
您可以使用groupby()
:假设您的数据帧称为df
avg_diff = df['diff'].groupby(level=0).mean()
这将为您提供一个基于window
的数据框。
如果要把它放在列表中,可以这样:
my_list = avg.tolist()