다음과 같은 테이블이 있습니다.
Scen F1 F2 F3 F4
0 S1 1 0 1 0
1 S2 0 1 0 1
Scen
해당 행에 대해 == 1 인 열 이름 을 검색 하고 반환 하려고합니다 ( 예 : 결과로 S1
필요한 F1, F3
경우).
나는 다음을 시도했고 하드 코딩으로 결과를 얻을 수 df_col[0]
있지만 이것을 동적으로 할 수 있어야합니다.
이를 수행하는 가장 좋은 방법은 무엇입니까?
import pandas as pd
d = {'Scen': ["S1", "S2"],
'F1': [1, 0],
'F2': [0, 1],
'F3': [1, 0],
'F4': [0, 1]
}
df = pd.DataFrame(data=d)
def get_features(df, col_name):
df_col = df[(df.Scen == col_name)].T
feats = (df_col[(df_col[0] == 1)]).index.to_list()
print(feats)
return feats
get_features(df, "S1")
get_features(df, "S2")
편집하다:
를 기반으로 RichieV 의 대답은,이 작품 :
def get_features(df, col_name):
df = df.replace(0, np.nan)
df = df.melt('Scen')
df_scen = (df['variable'].loc[(df['Scen']==col_name) & (df['value']==1)])
return (list(df_scen))
이것은 원-핫 디코딩 작업입니다. 하나로 인코딩 할 때 열을 피벗하므로 이제 다시 녹여야합니다.
df = df.replace(0, np.nan) # get rid of zeros, they only fill spaces
df = df.melt('Scen').drop('value', axis=1)
이제 df에는 각 해당 특성에 대해 반복되는 scen 행이있는 4 개의 행과 2 개의 열 (scen 및 변수)이 있습니다. df를 그대로 사용하거나 시나리오별로 그룹화하고 기능을 목록으로 수집 할 수 있습니다.
df = df.groupby('Scen').apply(list)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다