【发布时间】:2014-12-01 13:49:23
【问题描述】:
我正在使用 Pandas 0.13.0,并尝试根据索引值进行滑动平均。
索引值分布不均。 索引按递增和唯一值排序。
import pandas as pd
import Quantities as pq
f = {
'A': [ 0.0, 0.1, 0.2, 0.5, 1.0, 1.4, 1.5] * pq.m,
'B': [10.0, 11.0, 12.0, 15.0, 20.0, 30.0, 50.0] * pq.kPa
}
df = pd.DataFrame(f)
df.set_index(df['A'], inplace=True)
DataFrame 给出:
in: print df
out:
A B
A
0.00 0.00 m 10.0 kPa
0.10 0.10 m 11.0 kPa
0.20 0.20 m 12.0 kPa
0.50 0.50 m 15.0 kPa
1.00 1.00 m 20.0 kPa
1.40 1.40 m 30.0 kPa
1.50 1.50 m 50.0 kPa
现在我想为索引的每个 x 值(在 x 和 x+c 之间)计算 B 列的平均值,c 是用户定义的标准。
为了这个例子,c = 0.40。
平均过程会给出:
A B C
A
0.00 0.00 m 10.0 kPa 11.0 kPa = (10.0 + 11.0 + 12.0) / 3
0.10 0.10 m 11.0 kPa 12.7 kPa = (11.0 + 12.0 + 15.0) / 3
0.20 0.20 m 12.0 kPa 13.5 kPa = (12.0 + 15.0) / 2
0.50 0.50 m 15.0 kPa 15.0 kPa = (15.0) / 1
1.00 1.00 m 20.0 kPa 25.0 kPa = (20.0 + 30.0) / 2
1.40 1.40 m 30.0 kPa 40.0 kPa = (30.0 + 50.0) / 2
1.50 1.50 m 50.0 kPa 50.0 kPa = (50.0) / 1
请注意,由于索引值的空间不均匀,有时会找不到 x+c。现在还可以,不过我肯定会添加一种方法,在 x+c 之前的值和 x+c 之后的值之间取平均值,所以我得到了更准确的平均值。
我尝试了从 Zelazny7 找到的解决方案: pandas rolling computation with window based on values instead of counts
但我不能让它适用于我的情况,在索引上进行搜索。
我还看了: Pandas Rolling Computations on Sliding Windows (Unevenly spaced)
但我不明白如何将它应用到我的案例中。
知道如何以高效的 Pandas 方法解决这个问题吗? (使用apply、map还是rolling?)
谢谢。
【问题讨论】: