2015-12-21 81 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