代码之家  ›  专栏  ›  技术社区  ›  Christopher

python:将列转换为日期格式并提取顺序

  •  0
  • Christopher  · 技术社区  · 7 年前

    ID  ACT1        ACT2        ACT3        ACT4
    1   154438.0    154104.0    155321.0    155321.0
    2   154042.0    154073.0    154104.0    154104.0
    ...
    

    我发现以下功能可以帮助我获得公历日期:

    from datetime import datetime, timedelta
    gregorian = datetime.strptime('1582/10/15', "%Y/%m/%d")
    modified_date = gregorian + timedelta(days=154438)
    datetime.strftime(modified_date, "%Y/%m/%d")
    

    ID ORDER
    1  ACT1, ACT3, ACT4, ACT2
    2  ACT2, ACT1, ACT3, ACT4
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   Leo    7 年前

    听起来你有两个问题。

    cols = [col for col in df.columns if col != 'ID']
    df.loc[:, cols] = df.loc[:, cols].applymap(lambda x: datetime.strptime('1582/10/15', "%Y/%m/%d") + timedelta(days=x) if np.isfinite(x) else x)
    

    2)要获取排序的列名:

    df['ORDER'] = df.loc[:, cols].apply(lambda dr: ','.join(df.loc[:, cols].columns[dr.dropna().argsort()]), axis=1)
    

        2
  •  1
  •   Eamonn Kenny    7 年前

    首先,我将使输入列以逗号分隔,以便更容易处理表单:

    ID,ACT1,ACT2,ACT3,ACT4
    1,154438.0,154104.0,155321.0,155321.0
    2,154042.0,154073.0,154104.0,154104.0
    

    #!/usr/bin/env python3
    
    import csv
    from operator import itemgetter
    
    idAndTuple = {}
    with open('time.txt') as csvfile:
      reader = csv.DictReader(csvfile)
      for row in reader:
        myID = row.pop('ID',None)
        reorderedList = sorted(row.items(), key = itemgetter(1))
        idAndTuple[myID] = reorderedList
        print( myID, reorderedList )
    

    1 [('ACT2', '154104.0'), ('ACT1', '154438.0'), ('ACT3', '155321.0'), ('ACT4', '155321.0')]
    2 [('ACT1', '154042.0'), ('ACT2', '154073.0'), ('ACT3', '154104.0'), ('ACT4', '154104.0')]