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 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!