gpt4 book ai didi

python - Groupby 并在 pandas 中将值(value)抵消一年

转载 作者:行者123 更新时间:2023-12-01 07:07:20 25 4
gpt4 key购买 nike

我今天的目标是关注属于Category==1的每个ID在给定的日期,一年后。所以我有一个像这样的数据框:

Period      ID    Amount   Category
20130101 1 100 1
20130101 2 150 1
20130101 3 100 1
20130201 1 90 1
20130201 2 140 1
20130201 3 95 1
20130201 5 250 0
. . .
20140101 1 40 1
20140101 2 70 1
20140101 5 160 0
20140201 1 35 1
20140201 2 65 1
20140201 5 150 0

例如,在20130201中我有 2 个属于 Category 的 ID 1: 1,2,3,但 20140201 中只有其中 2 个出现:1,2。所以我需要获取Amount的值,仅适用于这些 ID,一年后,如下所示:

Period      ID    Amount   Category    Amount_t1
20130101 1 100 1 40
20130101 2 150 1 70
20130101 3 100 1 nan
20130201 1 90 1 35
20130201 2 140 1 65
20130201 3 95 1 nan
20130201 5 250 0 nan
. . .
20140101 1 40 1 nan
20140101 2 70 1 nan
20140101 5 160 0 nan
20140201 1 35 1 nan
20140201 2 65 1 nan
20140201 5 150 0 nan

所以,如果该 ID 明年没有出现或者属于 Category 0,我会得到一个nan 。我的第一个方法是获取每个 Period 上的唯一 ID 列表。然后尝试使用 groupby() 的某种组合将其映射到下一年和isin()像这样:

aux = df[df.Category==1].groupby('Period').ID.unique()
aux.index = aux.index + pd.DateOffset(years=1)

但我不知道如何继续下去。我在想某种groupby('ID')可能也会更有效率。如果是一个简单的shift()这很容易,但我不确定如何按组将值抵消一年。

最佳答案

在手动滞后连接键之一后,您可以通过精确合并创建滞后要素。

import pandas as pd

# Datetime so we can do calendar year subtraction
df['Period'] = pd.to_datetime(df.Period, format='%Y%m%d')

# Create one with the lagged features. Here I'll split the steps out.
df2 = df.copy()
df2['Period'] = df2.Period-pd.offsets.DateOffset(years=1) # 1 year lag
df2 = df2.rename(columns={'Amount': 'Amount_t1'})

# Keep only values you want to merge
df2 = df2[df2.Category.eq(1)]

# Bring lagged features
df.merge(df2, on=['Period', 'ID', 'Category'], how='left')
<小时/>
       Period  ID  Amount  Category  Amount_t1
0 2013-01-01 1 100 1 40.0
1 2013-01-01 2 150 1 70.0
2 2013-01-01 3 100 1 NaN
3 2013-02-01 1 90 1 35.0
4 2013-02-01 2 140 1 65.0
5 2013-02-01 3 95 1 NaN
6 2013-02-01 5 250 0 NaN
7 2014-01-01 1 40 1 NaN
8 2014-01-01 2 70 1 NaN
9 2014-01-01 5 160 0 NaN
10 2014-02-01 1 35 1 NaN
11 2014-02-01 2 65 1 NaN
12 2014-02-01 5 150 0 NaN

关于python - Groupby 并在 pandas 中将值(value)抵消一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382105/

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