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

求助: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 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建