按名称和来源重新采样 pandas 数据框
Resample pandas dataframe by both name and origin
我有以下 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 系列对象。
我尝试每周 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
我该如何解决这个问题?
我的输入数据(添加和更改一些日期):
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
by 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
或者您可以 select 列 Train
和 resample
通过 count
:
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
Select 一列 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
我有以下 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 系列对象。
我尝试每周 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
我该如何解决这个问题?
我的输入数据(添加和更改一些日期):
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
by 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
或者您可以 select 列 Train
和 resample
通过 count
:
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
Select 一列 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