【问题标题】:Groupby + conditional from another column to create new oneGroupby + 来自另一列的条件以创建新列
【发布时间】:2020-07-07 06:24:20
【问题描述】:

我正在尝试在新列(“2nd_visit_date”)中捕获“users”的“visit_num==2”的日期

这是代码(包括我要创建的新列)

df=pd.DataFrame({'user':[1,1,2,2,2,3,3,3,3,3,4,4],
                  'date':['1995-09-01','1995-09-02','1995-10-03','1995-10-04','1995-10-05','1995-11-07','1995-11-08','1995-11-09','1995-11-10','1995-11-15','1995-12-18','1995-12-20'],
                  'visit_num':[1,2,1,2,3,1,2,3,4,5,1,2],
                  '2nd_visit_date':['1995-09-02','1995-09-02','1995-10-04','1995-10-04','1995-10-04','1995-11-08','1995-11-08','1995-11-08','1995-11-08','1995-11-08','1995-12-20','1995-12-20']})

所以我得到:

user    date    visit_num   2nd_visit_date
 1   1995-09-01     1        1995-09-02
 1   1995-09-02     2        1995-09-02
 2   1995-10-03     1        1995-10-04
 2   1995-10-04     2        1995-10-04
 2   1995-10-05     3        1995-10-04
 3   1995-11-07     1        1995-11-08
 3   1995-11-08     2        1995-11-08
 3   1995-11-09     3        1995-11-08
 3   1995-11-10     4        1995-11-08
 3   1995-11-15     5        1995-11-08
 4   1995-12-18     1        1995-12-20
 4   1995-12-20     2        1995-12-20

我尝试了以下代码,但没有成功:

df["2nd_visit_date"] = df.groupby("user")["date"].transform(df['visit_num']==2)

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: python conditional-statements pandas-groupby


    【解决方案1】:

    假设这是你原来的df

    df
    
       user    date    visit_num
    0   1   1995-09-01  1
    1   1   1995-09-02  2
    2   2   1995-10-03  1
    3   2   1995-10-04  2
    4   2   1995-10-05  3
    5   3   1995-11-07  1
    6   3   1995-11-08  2
    7   3   1995-11-09  3
    8   3   1995-11-10  4
    9   3   1995-11-15  5
    10  4   1995-12-18  1
    11  4   1995-12-20  2
    

    您可以先为第二次访问创建数据框(并更改列名):

    df_2 = df[df.visit_num==2][['user', 'date']]
    df_2.columns = ['user', '2nd_visit_date']
    df_2
    
    
       user 2nd_visit_date
    1   1   1995-09-02
    3   2   1995-10-04
    6   3   1995-11-08
    11  4   1995-12-20
    

    并将其与您原来的 df 合并

    pd.merge(df, df_2, on='user', how='left')
    
        user    date    visit_num   2nd_visit_date
    0   1   1995-09-01      1         1995-09-02
    1   1   1995-09-02      2         1995-09-02
    2   2   1995-10-03      1         1995-10-04
    3   2   1995-10-04      2         1995-10-04
    4   2   1995-10-05      3         1995-10-04
    5   3   1995-11-07      1         1995-11-08
    6   3   1995-11-08      2         1995-11-08
    7   3   1995-11-09      3         1995-11-08
    8   3   1995-11-10      4         1995-11-08
    9   3   1995-11-15      5         1995-11-08
    10  4   1995-12-18      1         1995-12-20
    11  4   1995-12-20      2         1995-12-20
    

    【讨论】:

      猜你喜欢
      • 2022-07-28
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2019-03-19
      • 2020-03-20
      相关资源
      最近更新 更多