【问题标题】:The first and the last date that a variable appear in my dataframe变量出现在我的数据框中的第一个和最后一个日期
【发布时间】:2019-04-16 15:07:22
【问题描述】:

我希望变量出现在我的数据框中的第一个和最后一个日期:


   datetime           A
2019-03-04 00:03      1
2019-03-04 00:04      1
2019-03-04 00:05      2
2019-03-04 00:06      2 
2019-03-04 00:07      1
2019-03-04 00:08      2
2019-03-04 00:09      3
2019-03-04 00:10      3
2019-03-04 00:11      3
2019-03-04 00:12      4
2019-03-04 00:13      3

想要的输出:

A            First                     Last
1      2019-03-04 00:03          2019-03-04 00:07
2      2019-03-04 00:05          2019-03-04 00:08
3      2019-03-04 00:09          2019-03-04 00:13
4      2019-03-04 00:12          2019-03-04 00:12

我试过这个:

data_df=pd.Series({x : y.datetime.tolist() for x , y in df.groupby('A')})
data_df=pd.DataFrame({'A':data_df.index, 'datetime':data_df.values})
data_df

我有这个输出

A                              datetime
1       [2019-03-04 00:03,2019-03-04 00:04,2019-03-04 00:07]
2       [2019-03-04 00:05,2019-03-04 00:06,2019-03-04 00:08]
3       [2019-03-04 00:09,2019-03-04 00:10,2019-03-04 00:11,2019-03-04 00:13]
4       [2019-03-04 00:12]

【问题讨论】:

    标签: python pandas numpy date datetime


    【解决方案1】:

    使用agg 并在groupby 对象上传递函数列表:

    In[108]:
    df.groupby('A').agg(['first','last'])
    
    Out[108]: 
                 datetime                    
                    first                last
    A                                        
    1 2019-03-04 00:03:00 2019-03-04 00:07:00
    2 2019-03-04 00:05:00 2019-03-04 00:08:00
    3 2019-03-04 00:09:00 2019-03-04 00:13:00
    4 2019-03-04 00:12:00 2019-03-04 00:12:00
    

    如有需要可以拨打reset_index:

    In[109]:
    df.groupby('A').agg(['first','last']).reset_index()
    
    Out[109]: 
       A            datetime                    
                       first                last
    0  1 2019-03-04 00:03:00 2019-03-04 00:07:00
    1  2 2019-03-04 00:05:00 2019-03-04 00:08:00
    2  3 2019-03-04 00:09:00 2019-03-04 00:13:00
    3  4 2019-03-04 00:12:00 2019-03-04 00:12:00
    

    这会为每个组调用 firstlast

    更新 感谢@Wen-Ben 的建议,如果我们选择单列,那么这不会在 df 中创建多索引:

    In[110]:
    df.groupby('A')['datetime'].agg(['first','last'])
    
    Out[110]: 
                    first                last
    A                                        
    1 2019-03-04 00:03:00 2019-03-04 00:07:00
    2 2019-03-04 00:05:00 2019-03-04 00:08:00
    3 2019-03-04 00:09:00 2019-03-04 00:13:00
    4 2019-03-04 00:12:00 2019-03-04 00:12:00
    

    与你想要的输出匹配

    【讨论】:

    • df.groupby('A')['datetime'].agg(['first','last'])
    • @Wen-Ben 我猜这符合 OP 的实际要求,我会更新并感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多