मेरे पास सूची मूल्य वाले प्रत्येक पंक्ति के साथ डेटाफ्रेम है।
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
आईडी 0 और आईडी 1,2,3 के बीच चरण 2,3 को दोहराएं, इसी तरह सभी आईडी के लिए।
और एक एन एक्स एन डेटाफ्रेम बनाएं; इसके जैसा:
- 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
अभी मेरे कोड में केवल एक ही लूप है:
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,))
क्या ऐसा करने के लिए इससे अच्छा तरीका है? क्या मैं सिर्फ एक लूप पुनरावृत्ति करने के बजाय एक लागू फ़ंक्शन लिख सकता हूं। क्या मैं इसे तेज कर सकता हूं?
list_of_value?
list_of_value। मेरा मतलब कुल मिलाकर, सभी पंक्तियों में है।