2017-05-31 205 views
2

隨着pandas.DataFrame.resample我可以降低採樣一個數據幀:熊貓df.resample具有列特定聚合功能

df.resample("3s", how="mean") 

此重新採樣與日期時間樣索引的數據幀,使得在3秒內的所有值被聚集成一個行。列的值被平均。

問題:我有一個多列數據框。是否可以爲不同的列指定不同的聚合函數,例如我想"sum"x,"mean"y並挑"last"z?我怎樣才能達到這個效果?

我知道我可以創建一個新的空數據框,然後撥打resample三次,但我更喜歡更快的就地解決方案。

回答

7

重新採樣後可以使用.agg。用字典,你可以聚合不同的列與各種功能。

試試這個:

df.resample("3s").agg({'x':'sum','y':'mean','z':'last'}) 

此外,how被棄用:

C:\ Program Files文件\ Anaconda3 \ LIB \站點包\ ipykernel__main __潘岳:1: FutureWarning:如何在.resample()中已棄用,新語法爲 .resample(...)。mean()

+0

這裏我們使用的每列只有一次。如果我想在同一個列「x」上應用兩個函數,而爲另一個列「z」應用另一個函數。 –

+2

@KathirmaniSukumar你可以使用一個列表來保存你想對單個變量進行的所有功能。 'df.resample( '3S')AGG({ 'X':[ '總和', '平均'], 'Y': '最大值', 'Z':[ '分鐘', 'STD']})。 ' –

4

考慮da taframe df

np.random.seed([3,1415]) 
tidx = pd.date_range('2017-01-01', periods=18, freq='S') 
df = pd.DataFrame(np.random.rand(len(tidx), 3), tidx, list('XYZ')) 
print(df) 

          X   Y   Z 
2017-01-01 00:00:00 0.444939 0.407554 0.460148 
2017-01-01 00:00:01 0.465239 0.462691 0.016545 
2017-01-01 00:00:02 0.850445 0.817744 0.777962 
2017-01-01 00:00:03 0.757983 0.934829 0.831104 
2017-01-01 00:00:04 0.879891 0.926879 0.721535 
2017-01-01 00:00:05 0.117642 0.145906 0.199844 
2017-01-01 00:00:06 0.437564 0.100702 0.278735 
2017-01-01 00:00:07 0.609862 0.085823 0.836997 
2017-01-01 00:00:08 0.739635 0.866059 0.691271 
2017-01-01 00:00:09 0.377185 0.225146 0.435280 
2017-01-01 00:00:10 0.700900 0.700946 0.796487 
2017-01-01 00:00:11 0.018688 0.700566 0.900749 
2017-01-01 00:00:12 0.764869 0.253200 0.548054 
2017-01-01 00:00:13 0.778883 0.651676 0.136097 
2017-01-01 00:00:14 0.544838 0.035073 0.275079 
2017-01-01 00:00:15 0.706685 0.713614 0.776050 
2017-01-01 00:00:16 0.542329 0.836541 0.538186 
2017-01-01 00:00:17 0.185523 0.652151 0.746060 

使用agg

df.resample('3S').agg(dict(X='sum', Y='mean', Z='last')) 

          X   Y   Z 
2017-01-01 00:00:00 1.760624 0.562663 0.777962 
2017-01-01 00:00:03 1.755516 0.669204 0.199844 
2017-01-01 00:00:06 1.787061 0.350861 0.691271 
2017-01-01 00:00:09 1.096773 0.542220 0.900749 
2017-01-01 00:00:12 2.088590 0.313316 0.275079 
2017-01-01 00:00:15 1.434538 0.734102 0.746060