从此到下一次之间的天数列值为True?

加拉弗

我正在尝试进行日期计算,以计算熊猫中非日期列中事件之间经过的天数。

我有一个熊猫数据框,看起来像这样:

df = pd.DataFrame({'date':[
    '01.01.2020','02.01.2020','03.01.2020','10.01.2020', 
    '01.01.2020','04.02.2020','20.02.2020','21.02.2020', 
    '01.02.2020','10.02.2020','20.02.2020','20.03.2020'],
    'user_id':[1,1,1,1,2,2,2,2,3,3,3,3],
    'other_val':[0,0,0,100,0,100,0,10,10,0,0,10],
    'booly':[True, False, False, True,
            True, False, False, True, 
            True, True, True, True]})

现在,我一直无法弄清楚如何为每个用户创建一个新列,以说明在“ booly”列中每个True值之间经过的天数。因此,对于在“ booly”列中具有True的每一行,要等到下一行在“ booly”列中具有True的行发生多少天,就像这样:

    date    user_id  booly   days_until_next_booly
01.01.2020  1        True    9   
02.01.2020  1        False   None
03.01.2020  1        False   None
10.01.2020  1        True    None   
01.01.2020  2        True    51
04.02.2020  2        False   None
20.02.2020  2        False   None
21.01.2020  2        True    None
01.02.2020  3        True    9
10.02.2020  3        True    10
20.02.2020  3        True    29
20.03.2020  3        True    None
克里斯
# sample data 
df = pd.DataFrame({'date':[
    '01.01.2020','02.01.2020','03.01.2020','10.01.2020', 
    '01.01.2020','04.02.2020','20.02.2020','21.02.2020', 
    '01.02.2020','10.02.2020','20.02.2020','20.03.2020'],
    'user_id':[1,1,1,1,2,2,2,2,3,3,3,3],
    'other_val':[0,0,0,100,0,100,0,10,10,0,0,10],
    'booly':[True, False, False, True,
            True, False, False, True, 
            True, True, True, True]})

# convert data to date time format
df['date'] = pd.to_datetime(df['date'], dayfirst=True)

# use loc with groupby to calculate the difference between True values
df.loc[df['booly'] == True, 'days_until_next_booly'] = df.loc[df['booly'] == True].groupby('user_id')['date'].diff().shift(-1)


         date  user_id  other_val  booly days_until_next_booly
0  2020-01-01        1          0   True                9 days
1  2020-01-02        1          0  False                   NaT
2  2020-01-03        1          0  False                   NaT
3  2020-01-10        1        100   True                   NaT
4  2020-01-01        2          0   True               51 days
5  2020-02-04        2        100  False                   NaT
6  2020-02-20        2          0  False                   NaT
7  2020-02-21        2         10   True                   NaT
8  2020-02-01        3         10   True                9 days
9  2020-02-10        3          0   True               10 days
10 2020-02-20        3          0   True               29 days
11 2020-03-20        3         10   True                   NaT

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Dart : 显示到下一次的时间

求和值直到条件的下一次出现

SQL在X天数内找到下一次跟进(加入比较日期时间)

循环第一次执行与下一次执行之间的延迟

确定[Ruby]中从NOW(本地时间)到下一次DST更改之间的时间量

2的下一次幂

Pandas DataFrame Resample to OHLC:如何将上次关闭值设置为下一次打开?

计算当前时间与熊猫下一次失败之间的时差

获取下一次迭代值而不是当前的闪亮值

使用数据列表自动下一次聚焦到日期选择器

上一次 bash 循环迭代到下一次迭代的输出,用于不同的 grep 命令

如何将类变量从程序的第一次执行传递到下一次执行?

为下一次迭代减少列表的长度

下一次迁移到 ASP .Net Core MVC 3.1 时,FromBody 为空

如何使用 Espresso 为下一次测试检查保存的数据?

几个嵌套的“ for”循环,如果内部循环中的条件为true,则继续进行外部循环的下一次迭代

熊猫数据框按列值的下一次出现进行分组

进入下一次循环迭代,意外改变了值

基于多列的下一次出现的返回值

为什么在下一次迭代中不更改临时分配的值

R函数范围:希望在下一次迭代时看到返回值

使用 *ngFor 获取下一次迭代值

SQL:计算从首次出现到接下来的五分钟内某个值的出现,然后为下一次出现重复相同的值

计算下一次出现的细胞数

查找下一次出现的日期

查找下一次出现的时间,例如TemporalAdjuster

对于下一次迭代之前的循环延迟

在多个条件下一次移动多行

如何跳过下一次迭代?