我有一个数据集,该数据集具有每个ID的数据时间和值作为列。我对此进行了一些计算,但是在使用递归函数时遇到了麻烦。
数据集如下所示,
Date-Time Volume ID Load
10/22/2019 3862 10
10/23/2019 3800 10
10/24/2019 3700 10
10/25/2019 5000 10 Yes
10/26/2019 4900 10
10/27/2019 4800 10
10/22/2019 3862 11
10/23/2019 3800 11
10/24/2019 3700 11
10/25/2019 5000 11 Yes
10/26/2019 4900 11
10/27/2019 4800 11
我需要load_date的输出是
Date-Time Volume ID Load LoadDate
10/22/2019 3862 10 0
10/23/2019 3800 10 0
10/24/2019 3700 10 0
10/25/2019 5000 10 Yes 10/25/2019
10/26/2019 4900 10 10/25/2019
10/27/2019 4800 10 10/25/2019
10/22/2019 3862 11 0
10/23/2019 3800 11 0
10/24/2019 3700 11 0
10/25/2019 5000 11 Yes 10/25/2019
10/26/2019 4900 11 10/25/2019
10/27/2019 4800 11 10/25/2019
答案 0 :(得分:2)
IIUC,
我们可以在“是”值处进行索引,并通过一些索引过滤和.loc
分配来预先填充任何日期。
idx = df.loc[df['Load'] == 'Yes'].index # get all index values for Yes.
df['LoadDate'] = np.nan # create your col.
df.loc[idx, 'LoadDate'] = df['Date-Time']
分组并创建您的
df['LoadDate'] = (df.groupby('ID')['LoadDate'].ffill()).fillna(0)
#group by ID and ffill the load date and fill and nan's as 0.
这让我们留下了。
print(df)
Date-Time Volume ID Load LoadDate
0 10/22/2019 3862 10 0
1 10/23/2019 3800 10 0
2 10/24/2019 3700 10 0
3 10/25/2019 5000 10 Yes 10/25/2019
4 10/26/2019 4900 10 10/25/2019
5 10/27/2019 4800 10 10/25/2019
6 10/22/2019 3862 11 0
7 10/23/2019 3800 11 0
8 10/24/2019 3700 11 0
9 10/25/2019 5000 11 Yes 10/25/2019
10 10/26/2019 4900 11 10/25/2019
11 10/27/2019 4800 11 10/25/2019