使用Python计算同一列中最小值与另一列条件之间的日期差。

问题描述 投票:0回答:1
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)

我首先想到的是用

df['day_diff']=df.groupby(['country', 'status'])['date'].apply(lambda x: x - x.min())

但是,美国状态0的0天应该出现在2020-04-06,而不是2020-04-05,其中计数为0(对不起,我不知道如何在这里正确输出)。所以,应用于返回的day_diff的组应该有两个条件。

  1. count>0 - date.min()
  2. 日期 - date.min()

    country status  count   date    day_diff
        US  0   0   2020-04-05  0 days
    US  0   1   2020-04-06  1 days
    US  0   10  2020-04-07  2 days
    

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

我希望得到一个类似于这样的结果(当然不行)。

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

计算该日期与该组中最早的日期之间的差额 取决于第一个日期的计数是否超过0.

先谢谢你。

python pandas pandas-groupby
1个回答
2
投票

你可以使用 groupby().transform() 来提取最小日期。

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

df['date_diff'] = df['date'] - min_dates

输出:

   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
© www.soinside.com 2019 - 2024. All rights reserved.