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