python支持特定于时间增量的行

python支持特定于时间增量的行,python,datetime,pandas,timedelta,Python,Datetime,Pandas,Timedelta,我有一个赛季篮球成绩的数据框架,我想找出每支球队在本赛季每场比赛之间的间隔天数 示例框架: testDateFrame = pd.DataFrame({'HomeTeam': ['HOU', 'CHI', 'DAL', 'HOU'], 'AwayTeam' : ['CHI', 'DAL', 'CHI', 'DAL'], 'HomeGameNum': [1, 2, 2, 2],

我有一个赛季篮球成绩的数据框架,我想找出每支球队在本赛季每场比赛之间的间隔天数

示例框架:

  testDateFrame = pd.DataFrame({'HomeTeam': ['HOU', 'CHI', 'DAL', 'HOU'],
                          'AwayTeam' : ['CHI', 'DAL', 'CHI', 'DAL'],
                          'HomeGameNum': [1, 2, 2, 2],
                          'AwayGameNum' : [1, 1, 3, 3],
                          'Date' : [datetime.date(2014,3,11), datetime.date(2014,3,12),     datetime.date(2014,3,14), datetime.date(2014,3,15)]})
我想要的输出是:

  AwayGameNum AwayTeam Date  HomeGameNum HomeTeam AwayRest  HomeRest
        1      CHI  2014-03-11    1      HOU        nan       nan
        1      DAL  2014-03-12    2      CHI        nan        0
        3      CHI  2014-03-14    2      DAL         1         1
        3      DAL  2014-03-15    2      HOU         0         3 

其中AwayRest,HomeRest列是AwayTeam,HomeTeam-1的比赛间隔天数

我会稍微调整一下数据布局,使其符合Hadley Wickhams的定义。这使得计算更加简单。删除
AwayTeam
HomeTeam
的列,并与
Team
组成一列。然后装箱一个布尔列(
HomeTeam
),以确定该团队是否为主队

注意:我没有更改
AwayGameNum
HomeGameNum
,因此这些数字与您想要的输出不匹配。但这种方法会奏效


我会稍微调整一下您的数据布局,使其符合Hadley Wickhams的定义。这使得计算更加简单。删除
AwayTeam
HomeTeam
的列,并与
Team
组成一列。然后装箱一个布尔列(
HomeTeam
),以确定该团队是否为主队

注意:我没有更改
AwayGameNum
HomeGameNum
,因此这些数字与您想要的输出不匹配。但这种方法会奏效


@user2333196:为了保持数据整洁,请使用一列,
df['Rest']=Rest
,而不是两列。起初,我认为OP想要按日期分组,无论是在家还是在外。但是因为它只是按日期,rest的一列更有意义。@user2333196:为了保持数据整洁,请使用一列,
df['rest']=rest
,而不是两列。同意。起初,我认为OP想要按日期分组,无论是在家还是在外。但因为它只是按日期,所以rest的一列更有意义。
In [34]: df
Out[34]: 
   AwayGameNum Team       Date  HomeGameNum HomeTeam
0            1  CHI 2014-03-11            1    False
1            1  HOU 2014-03-11            1     True
2            1  DAL 2014-03-12            2    False
3            1  CHI 2014-03-12            2     True
4            3  CHI 2014-03-14            2    False
5            3  DAL 2014-03-14            2     True
6            3  DAL 2014-03-15            2    False
7            3  HOU 2014-03-15            2     True

[8 rows x 5 columns]

In [62]: rest = df.groupby(['Team'])['Date'].diff() - datetime.timedelta(1)

In [63]: df['HomeRest'] = rest[df.HomeTeam]

In [64]: df['AwayRest'] = rest[~df.HomeTeam]

In [65]: df
Out[65]: 
   AwayGameNum Team       Date  HomeGameNum HomeTeam  HomeRest  AwayRest
0            1  CHI 2014-03-11            1    False       NaT       NaT
1            1  HOU 2014-03-11            1     True       NaT       NaT
2            1  DAL 2014-03-12            2    False       NaT       NaT
3            1  CHI 2014-03-12            2     True    0 days       NaT
4            3  CHI 2014-03-14            2    False       NaT    1 days
5            3  DAL 2014-03-14            2     True    1 days       NaT
6            3  DAL 2014-03-15            2    False       NaT    0 days
7            3  HOU 2014-03-15            2     True    3 days       NaT

[8 rows x 7 columns]