각 행에 목록 값이있는 데이터 프레임이 있습니다.
id list_of_value
0 ['a','b','c']
1 ['d','b','c']
2 ['a','b','c']
3 ['a','b','c']
한 행과 다른 모든 행에 대해 점수를 계산해야합니다.
예를 들어 :
Step 1: Take value of id 0: ['a','b','c'],
Step 2: find the intersection between id 0 and id 1 ,
resultant = ['b','c']
Step 3: Score Calculation => resultant.size / id.size
모든 ID에 대해 유사하게 id 0과 id 1,2,3 사이에서 2,3 단계를 반복하십시오.
N x N 데이터 프레임을 생성하고; 이 같은 :
- 0 1 2 3
0 1 0.6 1 1
1 1 1 1 1
2 1 1 1 1
3 1 1 1 1
현재 내 코드에는 하나의 for 루프가 있습니다.
def scoreCalc(x,queryTData):
#mathematical calculation
commonTData = np.intersect1d(np.array(x),queryTData)
return commonTData.size/queryTData.size
ids = list(df['feed_id'])
dfSim = pd.DataFrame()
for indexQFID in range(len(ids)):
queryTData = np.array(df.loc[df['id'] == ids[indexQFID]]['list_of_value'].values.tolist())
dfSim[segmentDfFeedIds[indexQFID]] = segmentDf['list_of_value'].apply(scoreCalc,args=(queryTData,))
더 좋은 방법이 있습니까? for 루프 반복을 수행하는 대신 하나의 apply 함수를 작성할 수 있습니까? 더 빨리 만들 수 있습니까?
list_of_value
합니까?
list_of_value
. 나는 모든 행에서 전체를 의미합니다.