python - 按名称和来源重新采样 pandas 数据框

标签 python pandas time-series

我有以下 Pandas DataFrame 对象 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

现在,我想通过列出每周某个铁路公司从该车站出发的次数来重新抽样这个时间序列。

例如,每周有多少列英国铁路列车离开该车站?每周有多少列英国铁路列车从利兹出发离开该车站?

我怀疑结果是 Pandas 系列对象。

我尝试了每周英国铁路总计

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

我该如何解决这个问题?

最佳答案

我的输入数据(添加和更改一些日期):

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

或者您可以选择列 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 使用 isin并使用 count 而不是 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

关于python - 按名称和来源重新采样 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396128/

相关文章:

r - 在 R 中创建 ts 对象

python - Python 3.2 上的 PDF 生成

Python scipy.numpy.convolve 和 scipy.signal.fftconvolve 不同的结果

python - 如何缩放列表中的每个图像? pygame

python - 根据某些条件更新嵌套字典

python - 旋转多索引数据

python - 如何从 pandas 数据框中获取同一行(前一列)的前一个值?

python - 合并列,如果值不相同,则使用 pandas 取任何非空值

arrays - postgresql时间序列单个时间戳与数组推断时间

java - 将 JFreeChart TimeSeries 限制为工作时间