2015-12-21 94 views
2

我有以下熊貓數據框對象df。這是列出出發日期,預定出發時間和火車公司的列車時刻表。現在按名稱和來源重新取樣熊貓數據框

import pandas as pd 
df = 

      Year Month DayofMonth DayOfWeek DepartureTime Train Origin 
Datetime 
1988-01-01 1988 1  1   5  1457  BritishRail Leeds 
1988-01-02 1988 1  2   6  1458  DeutscheBahn Berlin 
1988-01-03 1988 1  3   7  1459  SNCF   Lyons 
1988-01-02 1988 1  2   6  1501  BritishRail Ipswich 

,我想通過每週列出某鐵路公司從該站出發的原點的次數來此重新採樣時間序列。

例如,每週有多少英國鐵路列車離開這個車站?從利茲出發,每週有多少英國鐵路列車離開這個車站?

我懷疑結果是一個熊貓系列對象。

我試圖爲英國每週總的Rails

BR_weekly = df[df['Train']=='BritishRail'].resample("W", how='sum') 

但是這並沒有給我一個時間序列的形式

Datetime Number of trains 
i.e. 
Datetime 
1988-01-03  434 
1988-01-10  982 
1988-01-17  989 
Freq: W-SUN, dtype: int64 

我怎樣才能解決這個問題呢?

回答

1

我的輸入數據(添加和更改一些日期):

print df 
      Year Month DayofMonth DayOfWeek DepartureTime   Train \ 
Datetime                  
1988-01-01 1988  1   1   5   1457 BritishRail 
1988-01-01 1988  1   1   5   1457 BritishRail 
1988-01-10 1988  1   2   6   1458 DeutscheBahn 
1988-01-12 1988  1   3   7   1459   SNCF 
1988-01-20 1988  1   2   6   1501 BritishRail 

      Origin 
Datetime    
1988-01-01 Leeds 
1988-01-01 Leeds 
1988-01-10 Berlin 
1988-01-12 Lyons 
1988-01-20 Ipswich 

可以使用groupby通過Grouper和計數Train列的值。

print df.groupby(pd.Grouper(freq='W'))['Train'].count() 
1988-01-03 2 
1988-01-10 1 
1988-01-17 1 
1988-01-24 1 
Freq: W-SUN, Name: Train, dtype: int64 

或者您也可以通過count選擇列Trainresample它:

print df['Train'].resample('W', how='count') 
Datetime 
1988-01-03 2 
1988-01-10 1 
1988-01-17 1 
1988-01-24 1 
Freq: W-SUN, Name: Train, dtype: int64 

編輯:

我認爲你不能使用sum,因爲它連接字符串中Train列:

print df.Train[df['Train'].isin(['BritishRail'])].resample("W", how='sum') 
Datetime 
1988-01-03 BritishRailBritishRail 
1988-01-10       0 
1988-01-17       0 
1988-01-24    BritishRail 
Freq: W-SUN, Name: Train, dtype: object 

選擇一列Train,其中BritishRail使用isincount,而不是sum重新取樣,:

print df.Train[df['Train'].isin(['BritishRail'])].resample("W", how='count') 
Datetime 
1988-01-03 2 
1988-01-10 0 
1988-01-17 0 
1988-01-24 1 
Freq: W-SUN, Name: Train, dtype: int64 
+0

它是如何工作的?我瞭解你的問題嗎? – jezrael

+0

工作。我相信'.isin()'方法是最好的。謝謝! – JianguoHisiang

+0

您可以幫助解決我遇到的問題:http://stackoverflow.com/questions/34401244/how-to-use-pandas-series-to-plot-two-time-series-of-different-長度起動-d?noredirect = 1#comment56546040_34401244 – JianguoHisiang

相關問題