我使用熊貓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)
數據幀給出:
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值的列B的平均,x和x + C之間,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)
但我不知道如何將它應用到我的情況。
任何想法如何在高效率的熊貓方法中解決這個問題? (使用apply,map還是滾動?)
謝謝。
喜,非常感謝您的回答。它絕對有幫助。但是在平均過程之後,我放棄了單位。 C列應以'kPa'爲單位返回結果。如果我在f函數中打印ser.mean(),則該單元已連接。但是在返回結果時它會丟失。 – Julien 2014-10-07 09:34:13
@Julien我嘗試使用您的數量模塊,但它對我的數據沒有任何作用,您可以將其添加到該函數中,例如'return ser.mean()* pq.kPa'或在列產生後執行此操作,例如, 'df ['C'] = df ['C'] * pq.kPa' – EdChum 2014-10-07 09:52:26
@Julien問題可能在於我運行的版本不同,我使用熊貓'0.14.1',numpy'1.9.0'和python的'3.3.2' 64位 – EdChum 2014-10-07 09:55:01