>source

n개의 열로 구성된 데이터 프레임을 추출했습니다. 여기서 첫 번째 열은 "성공" 및 "실패" 열 쌍이 뒤따르는 헤더가 없는 인덱스 열입니다. 이 code를 사용하여 성공 전용 열을 추출하고 인덱스 열에 헤더를 배치했습니다.

df2= df1.iloc[:,0::2]
df3= df2
df3.reset_index(inplace=True)
df4= df3.rename(columns= {'index':'out_date'})
df4

code 출력은 여기에서 찾을 수 있습니다.

sort_values를 사용하여 "out_date" 열을 오름차순으로 정렬하고 싶지만 이것이 작동하려면 "success" 열이 고유해야 합니다. 헤더 이름을 "success1", "success2", "success3",...으로 바꿀 수 있는 이 code 줄이 있지만 "out_date" 열을 제외하는 방법을 알 수 없습니다.

numcolumn= df4.shape[1]
df4.columns= ["success"+str(x) for x in range(1,numcolumn+1)]
df4

도움을 주시면 감사하겠습니다. 감사합니다.

  • 답변 # 1

    열 이름을 중복 제거하는 일반적인 방법을 게시했지만 첫 번째 항목은 그대로 두었습니다.

    def suffix():
        yield ''
        i= 0
        while True:
            i += 1
            yield f'_{i}'
    def dedup(df):
        from collections import defaultdict
        d= defaultdict(suffix)
        df.columns= df.columns.map(lambda x: x+next(d[x]))
    dedup(df)
    

    예:

    df= pd.DataFrame([range(7)], columns=['out_date']+['success']*6)
    #    out_date  success  success  success  success  success  success
    # 0         0        1        2        3        4        5        6
    dedup(df)
    print(df)
    

    출력:

     out_date  success  success_1  success_2  success_3  success_4  success_5
    0         0        1          2          3          4          5          6
    

  • 답변 # 2

    변환하기 전에 새 열 이름을 설정하는 것이 좋습니다.인덱스에게out_date세다그리고f-문자열에스:

    df2= df1.iloc[:,0::2]
    df2.columns= [f"success{i}" for i, x in enumerate(df2.columns, 1)]
    df4= df2.rename_axis('out_date').reset_index()
    

    필요한 경우 솔루션이 가능한 경우 목록과 같은 첫 번째 값을 추가하십시오.

    df4.columns= df4.columns[:1].tolist() + ["success"+str(x) for x in range(1,numcolumn)]
    

  • 이전 Ruby에서 스택 추적 개체를 얻는 방법은 무엇입니까?
  • 다음 linux : tar 동안 메모리 사용량을 제한하는 방법