pandas 分组后获取最小时间增量

xdnvmnnf  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(158)

我 有 这样 的 话 :

df_columns = {
    'firm_ID': [1, 1, 2, 2, 2],
    'date_incident' : ['2015-01-01', '2015-01-01', '2016-10-01', '2016-10-01', '2016-10-01'],
    'date_meeting' : ['2014-02-01', '2016-03-01', '2015-10-01', '2017-02-01', '2018-11-01'],
    }
simple_df = pd.DataFrame(df_columns)
simple_df['date_incident'] = pd.to_datetime(simple_df['date_incident'])
simple_df['date_meeting'] = pd.to_datetime(simple_df['date_meeting'])
simple_df['date_delta'] = simple_df['date_incident'] - simple_df['date_meeting']

中 的 每 一 个
每个 firm _ ID 只有 一 个 date _ incident , 但 每个 firm _ ID 有 多 个 date _ meetings 。 我 需要 一 个 额外 的 列 来 返回 每个 firm _ ID 的 最 小 日期 差值 。 请 注意 , 此 差值 也 可以 为 负 。

因此 , 我 得到 如下 结果 ( 例如 , 对于 firm _ ID = 2 , 最近 的 会议 是 -123 天 之前 ) :

  • 谢谢 - 谢谢
rks48beu

rks48beu1#

对于转换为天数的时间增量的绝对值最小的行,使用DataFrameGroupBy.idxmin,然后通过使用Series.map进行Map来创建新列:

idx = simple_df['date_delta'].dt.days.abs().groupby(simple_df['firm_ID']).idxmin()
df = simple_df.loc[idx]

simple_df['new'] = simple_df['firm_ID'].map(df.set_index('firm_ID')['date_delta'])
print (simple_df)
   firm_ID date_incident date_meeting date_delta       new
0        1    2015-01-01   2014-02-01   334 days  334 days
1        1    2015-01-01   2016-03-01  -425 days  334 days
2        2    2016-10-01   2015-10-01   366 days -123 days
3        2    2016-10-01   2017-02-01  -123 days -123 days
4        2    2016-10-01   2018-11-01  -761 days -123 days

相关问题