gpt4 book ai didi

python - 在 Pandas DataFrame 中获取至少 6 个月前最新日期的 id 值

转载 作者:行者123 更新时间:2023-12-04 09:44:12 24 4
gpt4 key购买 nike

对含糊不清的问题表示歉意,除了回答之外,请帮助我使这个问题更清楚。

下面是我有“df”的pandas.DataFrame和我想要“df1”的pandas.DataFrame。

“df1”有一列“val_6_months_ago”,它显示了 6 个月前“id”的“val”。

from datetime import datetime
import pandas as pd

df = pd.DataFrame({'id': ['a', 'a', 'a', 'b', 'b'],
'val': [1, 2, 3, 4, 5],
'date': [datetime(2019,4,1), datetime(2019,12,1), datetime(2020,1,1), datetime(2018,1,1), datetime(2020,1,1)]})

df1 = pd.DataFrame({'id':['a', 'a', 'a', 'b', 'b'],
'val':[1, 2, 3, 4, 5],
'date':[datetime(2019,4,1), datetime(2019,12,1), datetime(2020,1,1), datetime(2018,1,1), datetime(2020,1,1)],
'val_6_months_ago':[None, 1, 1, None, 4]})

最佳答案

让我们对 pd.merge_asof 使用“自连接”并使用 pd.DateOffset 计算日期:

df['date_6_months_ago'] = df['date'] - pd.DateOffset(months=6)

df_out = pd.merge_asof(df.sort_values('date_6_months_ago'), df[['id','date','val']].sort_values('date'),
left_on='date_6_months_ago',
right_on='date',
by='id',
direction='backward',
suffixes=('','_6_months_ago'))\
.drop('date_6_months_ago', axis=1)

输出:
  id  val       date  val_6_months_ago
1 a 1 2019-04-01 NaN
2 a 2 2019-12-01 1.0
3 a 3 2020-01-01 1.0
0 b 4 2018-01-01 NaN
4 b 5 2020-01-01 4.0

关于python - 在 Pandas DataFrame 中获取至少 6 个月前最新日期的 id 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62195914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com