>

df 와 같은 데이터 프레임이 있습니다  :

  info      task                                               timestamp  
0  foo       ABC                                           ['2016-04-30']  
1  bar       DEF ['2016-01-31', '2015-06-30', '2016-06-30', '2016-08-31']  
2  bar       GHI               ['2015-12-31', '2016-08-31', '2016-05-31']  
3  foo       JKL                                           ['2017-03-31']  
4  foo       XYZ               ['2016-02-29', '2015-10-31', '2016-01-31'] 

타임 스탬프열에서 날짜를 정렬하고 싶습니다. 타임 스탬프 열의 값은 목록 및 문자열 유형입니다.

원하는 출력 :

  info      task                                               timestamp  
0  foo       ABC                                           ['2016-04-30']  
1  bar       DEF ['2015-06-30', '2016-01-31', '2016-06-30', '2016-08-31']  
2  bar       GHI               ['2015-12-31', '2016-05-31', '2016-08-31']  
3  foo       JKL                                           ['2017-03-31']  
4  foo       XYZ               ['2015-10-31', '2016-01-31', '2016-02-29']


  • 답변 # 1

    그래서 명백한 대답은 apply(sorted) 에 전화하는 것입니다  여기에서는 데이터를 구성하는 방법에 근본적인 결함이 있기 때문에 탄젠트를 진행하겠습니다.

    먼저 데이터를 병합합시다

    df
      info task                                         timestamp
    0  foo  ABC                                      [2016-04-30]
    1  bar  DEF  [2016-01-31, 2015-06-30, 2016-06-30, 2016-08-31]
    2  bar  GHI              [2015-12-31, 2016-08-31, 2016-05-31]
    3  foo  JKL                                      [2017-03-31]
    4  foo  XYZ              [2016-02-29, 2015-10-31, 2016-01-31]
    
    
    v = df.values
    i = v[:, :-1].repeat(df.timestamp.str.len(), axis=0)
    j = np.concatenate(v[:, -1]).reshape(-1, 1)
    df = pd.DataFrame(np.hstack((i, j)), columns=df.columns)
       info task   timestamp
    0   foo  ABC  2016-04-30
    1   bar  DEF  2016-01-31
    2   bar  DEF  2015-06-30
    3   bar  DEF  2016-06-30
    4   bar  DEF  2016-08-31
    5   bar  GHI  2015-12-31
    6   bar  GHI  2016-08-31
    7   bar  GHI  2016-05-31
    8   foo  JKL  2017-03-31
    9   foo  XYZ  2016-02-29
    10  foo  XYZ  2015-10-31
    11  foo  XYZ  2016-01-31
    
    

    이제 groupby  처음 두 열과 sort_values 를 호출  -

    df.groupby(['info', 'task'], sort=False)\
      .timestamp\
      .apply(pd.Series.sort_values)\
      .reset_index(level=[0, 1])
       info task   timestamp
    0   foo  ABC  2016-04-30
    2   bar  DEF  2015-06-30
    1   bar  DEF  2016-01-31
    3   bar  DEF  2016-06-30
    4   bar  DEF  2016-08-31
    5   bar  GHI  2015-12-31
    7   bar  GHI  2016-05-31
    6   bar  GHI  2016-08-31
    8   foo  JKL  2017-03-31
    10  foo  XYZ  2015-10-31
    11  foo  XYZ  2016-01-31
    9   foo  XYZ  2016-02-29
    
    

    아직 신청이 필요하지만, 특히 다른 작업에 apply 가 필요하지 않을 수 있다는 점을 고려할 때 훨씬 더 빨리 내기를 걸고 싶습니다.  더 이상.

  • 답변 # 2

    Apply를 사용하면 Series 값에 함수를 호출 할 수 있습니다 :

    df.timestamp.apply(sorted)
    
    

    결과를 ​​타임 스탬프 열에 다시 할당 할 수 있습니다.

관련 자료

  • 이전 sql server - 마지막으로 파이프 라인을 실행 한 Data Factory V1 시스템 변수
  • 다음 sql server - SSRS 업데이트 데이터 소스는 항상"비밀번호가 유효하지 않습니다 비밀번호를 다시 입력하십시오"