有没有一种方法可以为条件在数据框中打印以前的日期时间值?

时间:2019-11-11 20:37:14

标签: python pandas dataframe datetime recursion

我有一个数据集,该数据集具有每个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

1 个答案:

答案 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