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

求助: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条)

报告相同问题?

悬赏问题

  • ¥15 微信购物商城购物车的所有功能以及购物车,和首页的搜索功能
  • ¥40 servlet的web程序部署出错
  • ¥50 activiti 新建流程系列问题
  • ¥50 为什么我版本升级之后运行速度变慢5倍??
  • ¥15 如何在gazebo中加载机械臂和机械手
  • ¥15 纯运放实现隔离采样方案设计
  • ¥20 easyconnect无法连接后缀带.com的网站,一直显示找不到服务器ip地址,但是带有数字的网站又是可以连接上的,如何解决
  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!