Python—从数据帧中提取以前的日期和其他数据

Python—从数据帧中提取以前的日期和其他数据,python,pandas,Python,Pandas,我需要能够以mm/dd/yyyy格式获取一个日期,提取下一个最新日期和相应的其他值,并将它们放置在具有下一个最新日期的行中的新列中,同时保持其他两个变量不变。如果没有符合条件的内容,则新列将留空 我发现: 这让我很接近,但不是我所需要的 因此,在下面的示例中,如果团队名称和游戏类型相同,并且该集合中有两个或多个日期,则最近的日期将从下一个最近的日期中提取数据,依此类推 原件: | Team Name | Game Type | Score | Date

我需要能够以mm/dd/yyyy格式获取一个日期,提取下一个最新日期和相应的其他值,并将它们放置在具有下一个最新日期的行中的新列中,同时保持其他两个变量不变。如果没有符合条件的内容,则新列将留空

我发现:

这让我很接近,但不是我所需要的

因此,在下面的示例中,如果团队名称和游戏类型相同,并且该集合中有两个或多个日期,则最近的日期将从下一个最近的日期中提取数据,依此类推

原件:

| Team Name  |   Game Type    |    Score    |     Date     |
| Tigers     |   Away         |      50     |    1/21/21   |
| Tigers     |   Home         |      47     |    2/20/21   |
| Tigers     |   Away         |      29     |    1/30/21   |
| Lions      |   Home         |      52     |    2/1/21    |
| Team Name  |   Game Type    |    Score    |     Date     |    Previous Score   |   Previous Date  |
| Tigers     |   Away         |      50     |    1/21/21   |                     |                  |
| Tigers     |   Home         |      47     |    2/20/21   |                     |                  |
| Tigers     |   Away         |      29     |    1/30/21   |         50          |     1/21/21      |
| Lions      |   Home         |      52     |    2/1/21    |                     |                  |
期望输出: 原件:

| Team Name  |   Game Type    |    Score    |     Date     |    Previous Score   |   Previous Date  |
| Tigers     |   Away         |      50     |    1/21/21   |                     |                  |
| Tigers     |   Home         |      47     |    2/20/21   |                     |                  |
| Tigers     |   Away         |      29     |    1/30/21   |         50          |     1/21/21      |
| Lions      |   Home         |      52     |    2/1/21    |                     |                  |

按日期排序后,您可以按groupby和shift并将其分配给两个不同的列:

df = pd.read_csv(io.StringIO(
'''
TeamName,GameType,Score,Date
Tigers,Away,50,1/21/21
Tigers,Home,47,2/20/21
Tigers,Away,29,1/30/21
Lions,Home,52,2/1/21
'''),sep=',')
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%y')
df = df.sort_values('Date')
df[['PreviousScore','PreviousDate']] = df.groupby(['TeamName','GameType']).shift(1)
print(df)
输出:

    TeamName    GameType    Score   Date    PreviousScore   PreviousDate
0   Tigers      Away        50      1/21/21 NaN             NaN
2   Tigers      Away        29      1/30/21 50.0            1/21/21
3   Lions       Home        52      2/1/21  NaN             NaN
1   Tigers      Home        47      2/20/21 NaN             NaN