weixin_43428945 2019-09-20 17:43 采纳率: 0%
浏览 5176
已采纳

求助:python dataframe相同项的两行数相减,几个大神看来都说难

#求助:python dataframe相同项的两行数相减,几个大神看来都说难

数据如下图:
图片说明

要求:
用python构成一个新dataframe,计算出相同Serialsnumber的Receive Date的差。(也就是说算出没部机收到日期的间隔天数)

急,请大神帮忙!!!!
问题补充:
Serialsnumber不只两个是相同的,有写有三个或四个相同的,要求计算出最大和第二大的Receive Date的差值。补充数据如图:
图片说明

  • 写回答

3条回答 默认 最新

  • 毕小宝 博客专家认证 2019-09-20 17:54
    关注

    可以用 DataFrame 的 group 分组,然后对组内的元素查找最大和第二大的日期。
    完整代码如下:

    from pandas import Series,DataFrame
    from datetime import datetime
    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(
    {'Serialsnumber': 'BR85278403 BR85278403 BR85278403 BR85278403 BR85279403 BR85279403 BR85279403 BH58960 BH58960 BH539411 BH539411'.split(), 
     'Receive Date': ['2018-04-03', '2018-10-26', '2019-03-21','2019-07-22', '2017-09-23', '2017-12-14','2018-10-09', '2017-11-02', '2018-04-23','2017-09-09', '2018-05-11',], 
     'QTY': [1, 1, 1, 1, 1, 1, 1 ,1, 1, 1 ,1]})
    
    print df
    
    g = df.groupby('Serialsnumber')
    
    for name ,group in g:
        #get max Date
        maxDate = group['Receive Date'].max()
    
        #去掉最大值后得到一个 list ,取这 list 的 max 就是第二大日期了
        list = []
        for temp in group['Receive Date']:
            if temp != maxDate :
                list.append(temp)
    
        #find the second max Date
        secondDate = max(list)
    
        #datediff
        datediff = datetime.strptime(maxDate,'%Y-%m-%d')-datetime.strptime(secondDate,'%Y-%m-%d')
        print name,'maxDate is',maxDate,'secondDate',secondDate,'diffDay',datediff
    
    

    我把日期统一相同格式的了,后面就是直接对分组内的数据按楼主需求进行处理即可。
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 三爪夹具,在重物的影响下,三爪受力怎么分析?能把三个爪当成螺栓吗?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目