Ich erstellte einen DataFrame neighbours
mit sim_measure_i
, die auch ein DataFrame ist.Verarbeiten einer Liste in einer Dataframe-Spalte
neighbours= sim_measure_i.apply(lambda s: s.nlargest(k).index.tolist(), axis =1)
neighbours
sieht wie folgt aus:
1500 [0, 1, 2, 3, 4]
1501 [0, 1, 2, 3, 4]
1502 [0, 1, 2, 3, 4]
1503 [7230, 12951, 13783, 8000, 18077]
1504 [1, 3, 6, 27, 47]
Die zweite Spalte hat hier Listen - ich über diese Datenrahmen und die Arbeit an der Liste zu durchlaufen wollen, so dass ich jedes Element in der Liste lesen kann - sagen 7230 und suchen Sie eine Punktzahl für 7230 in einem anderen DataFrameI haben, die enthält (ID, Score).
würde ich dann gerne eine Spalte zu diesem Datenrahmen hinzuzufügen, so dass es wie
test_case_id nbr_list scores
1500 [0, 1, 2, 3, 4] [+1, -1, -1, +1, -1]
1501 [0, 1, 2, 3, 4] [+1, +1, +1, -1, -1]
1502 [0, 1, 2, 3, 4] [+1, +1, +1, -1, -1]
1503 [7230, 12951, 13783, 8000, 18077] [+1, +1, +1, -1, -1]
1504 [1, 3, 6, 27, 47] [+1, +1, +1, -1, -1]
Bearbeiten sieht: ich geschrieben habe, ein Verfahren get_scores()
def get_scores(list_of_neighbours):
score_matrix = []
for x, val in enumerate(list_of_neighbours):
score_matrix.append(df.iloc[val].score)
return score_matrix
Wenn ich versuche, lambda
zu verwenden, um auf jeder nbr_list
ich diesen Fehler:
TypeError: ("cannot do positional indexing on <class 'pandas.indexes.numeric.Int64Index'> with these indexers [0] of <type 'str'>", u'occurred at index 1500')
Der Code verursacht dieses Problem:
def nearest_neighbours(similarity_matrix, k):
neighbours = pd.DataFrame(similarity_matrix.apply(lambda s: s.nlargest(k).index.tolist(), axis =1))
neighbours = neighbours.rename(columns={0 : 'nbr_list'})
nbr_scores = neighbours.apply(lambda l: get_scores(l.nbr_list), axis=1)
print neighbours
Thank you! Dies funktionierte mit leichten Modifikationen für meinen Fall. – boltthrower