根据另一列计算同一列中最小值之间的日期差';使用Python创建条件

根据另一列计算同一列中最小值之间的日期差';使用Python创建条件,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我想到的第一件事就是使用 d = {'country': ['US', 'US', 'US','US', 'US', 'US', 'UK', 'UK','UK','UK','UK'], 'status': [0, 0, 0, 0, 1,1,0, 0, 0, 1,1], 'count':[0, 1, 10, 20,30,40,0,1,2,4,6], 'date':['2020-04-05', '2020-04-06', '2020-04-07', '2020-04

我想到的第一件事就是使用

d = {'country': ['US', 'US', 'US','US', 'US', 'US', 'UK', 'UK','UK','UK','UK'], 
     'status': [0, 0, 0, 0, 1,1,0, 0,  0, 1,1],
     'count':[0, 1, 10, 20,30,40,0,1,2,4,6],
     'date':['2020-04-05', '2020-04-06', '2020-04-07', '2020-04-11', '2020-04-12', 
             '2020-04-13', '2020-04-02', '2020-04-03', '2020-04-05', '2020-04-06', '2020-04-07']}
df = pd.DataFrame(data=d)
但是,美国状态0的0天应该出现在2020-04-06,而不是2020-04-05,在2020-04-05中,计数为0(抱歉,我不知道如何正确地将输出放在这里)。因此,对于应用于返回日的组,应该有两个条件

  • 计数>0
  • date-date.min()

    3美国0 20 2020-04-11 6天 4美国1 30 2020-04-12 0天 5美国1402020-04-13 1天 6英国0 0 2020-04-02 0天 7英国0 1 2020-04-03 1天 8英国0 2 2020-04-05三天 9英国1 4 2020-04-06 0天 10英国16 2020-04-07 1天

  • 我希望得到类似的结果(当然不起作用):

    根据第一个日期的计数是否大于0,计算该日期与组中最早日期之间的差值

    先谢谢你

    您可以使用
    groupby().transform()
    提取最小日期:

    df.groupby(['country', 'status'])['date'].apply(lambda x: x - x.min() if df['count']>0)
    
    输出:

    min_dates = (df.date.mask(df['count'].eq(0))
                   .groupby([df['country'],df['status']])
                   .transform('min')
                )
    
    df['date_diff'] = df['date'] - min_dates
    
    您可以使用
    groupby().transform()
    提取最小日期:

    df.groupby(['country', 'status'])['date'].apply(lambda x: x - x.min() if df['count']>0)
    
    输出:

    min_dates = (df.date.mask(df['count'].eq(0))
                   .groupby([df['country'],df['status']])
                   .transform('min')
                )
    
    df['date_diff'] = df['date'] - min_dates
    

    你能包括你得到的错误和你期望的结果吗?嗨,我编辑了这个问题。希望它有意义。你能包括你得到的错误和你期望的输出是什么吗?嗨,我编辑了这个问题。希望它会有意义。谢谢你,但是,问题仍然存在:第一天应该定义为计数>0。应该有另一个条件应用于此,如第一天(0天)谢谢你,但是,问题仍然存在:第一天应定义为计数>0。应在第一天(0天)应用另一个条件
       country  status  count       date date_diff
    0       US       0      0 2020-04-05   -1 days
    1       US       0      1 2020-04-06    0 days
    2       US       0     10 2020-04-07    1 days
    3       US       0     20 2020-04-11    5 days
    4       US       1     30 2020-04-12    0 days
    5       US       1     40 2020-04-13    1 days
    6       UK       0      0 2020-04-02   -1 days
    7       UK       0      1 2020-04-03    0 days
    8       UK       0      2 2020-04-05    2 days
    9       UK       1      4 2020-04-06    0 days
    10      UK       1      6 2020-04-07    1 days