2017-03-08 3 views
2

에서 그룹 고유의 COL2 및 COL3 값에서 고유 COL1 값을 스키마 COL1 = INT, COL2 = STR 같은 COL3 = STR으로 CSV 테이블을 변환하고자하는 :어떻게 CSV

입력 샘플

INT1, S1, S2 
INT1, S1, S3 
INT1, S2, S3 
INT2, S1, S2 
INT2, S1, S3 
INT2, S1, S4 
INT2, S2, S3 
INT2, S2, S4 
INT2, S3, S4 

출력 CSV/테이블에 COL2 또는 COL3의 고유 문자열이 출력 된 고유 COL1 INT의 목록 (출력 테이블의 COL2/CSV) 다음에 COL1로 출력됩니다.

출력 CSV/표 : 동일

S1, [INT1, INT2] 
S2, [INT1, INT2] 
S3, [INT1, INT2] 
S4, [INT2] 
+0

고유의 의미를 무엇? 열에 고유하거나 열 2와 열 3에 고유합니까? – Denziloe

답변

3

첫째, 당신은 melt를 사용할 수 있습니다. 둘째, 이제 용융 열을 기준으로 그룹에 groupby을 사용하고 각 하위 그룹 (S1, S2 등)에 대한 COL1의 고유 한 값을 얻을 수 있습니다 :

# create example df 
df = pd.DataFrame([["INT1", "S1", "S5"], 
        ["INT1", "S2", "S3"], 
        ["INT2", "S1", "S2"], 
        ["INT2", "S1", "S3"]], 
        columns=["COL1", "COL2", "COL3"]) 
print(df) 

    COL1 COL2 COL3 
0 INT1 S1  S5 
1 INT1 S2  S3 
2 INT2 S1  S2 
3 INT2 S1  S3 

result = pd.melt(df, id_vars="COL1").groupby("value")["COL1"].unique() 
print(result) 

S1 [INT1, INT2] 
S2 [INT1, INT2] 
S3 [INT1, INT2] 
S5 [INT1] 
1

COL2 경우와 COL3, 당신은 값으로 긴 형식 그룹에 두 개의 열을 스택 및 set 기능으로 INT 컬럼의 독특한 요소를 찾을 수 있습니다 : 세로로 긴 형식으로 COL2COL3 스택에

df.set_index(0).stack().rename("s").reset_index().groupby('s')[0].apply(set) 

#s 
# S1 {INT2, INT1} 
# S2 {INT2, INT1} 
# S3 {INT2, INT1} 
# S4   {INT2} 
#Name: 0, dtype: object