我具有由月和年爲多個傳感器的傳感器數據:大熊貓:計算從所述差的分組的平均
import pandas as pd
df = pd.DataFrame([
['A', 'Jan', 2015, 13],
['A', 'Feb', 2015, 10],
['A', 'Jan', 2016, 12],
['A', 'Feb', 2016, 11],
['B', 'Jan', 2015, 7],
['B', 'Feb', 2015, 8],
['B', 'Jan', 2016, 4],
['B', 'Feb', 2016, 9]
], columns = ['sensor', 'month', 'year', 'value'])
In [2]: df
Out[2]:
sensor month year value
0 A Jan 2015 13
1 A Feb 2015 10
2 A Jan 2016 12
3 A Feb 2016 11
4 B Jan 2015 7
5 B Feb 2015 8
6 B Jan 2016 4
7 B Feb 2016 9
予算出的平均每個傳感器和每月用GROUPBY:
month_avg = df.groupby(['sensor', 'month']).mean()['value']
In [3]: month_avg
Out[3]:
sensor month
A Feb 10.5
Jan 12.5
B Feb 8.5
Jan 5.5
現在我想添加一列到df
與月平均值的差異,如下所示:
sensor month year value diff_from_avg
0 A Jan 2015 13 1.5
1 A Feb 2015 10 2.5
2 A Jan 2016 12 0.5
3 A Feb 2016 11 0.5
4 B Jan 2015 7 2.5
5 B Feb 2015 8 0.5
6 B Jan 2016 4 -1.5
7 B Feb 2016 9 -0.5
我想多索引df
和avgs_by_month
相似,並試圖簡單的減法,但沒有好:
df = df.set_index(['sensor', 'month'])
df['diff_from_avg'] = month_avg - df.value
謝謝你的任何建議。
當然!對我來說太快了!我應該開始使用'assign',如果只是爲了更快地寫出答案! –
這看起來不錯,但是我在第一行得到了一個無益的錯誤:'AttributeError:'NoneType'對象沒有屬性'transform''。任何想法這可能意味着什麼? – robroc
@ juanpa.arrivillaga我使用'assign',因爲我不喜歡打破'df' ..特別是當我可能很好的時候操作。 – piRSquared