[Tutor] Issue with set_value function
Yap Gerald
gerayap at gmail.com
Mon Feb 13 02:23:47 EST 2017
Hi Tutors,
I have a problem with the functions set_value which I could not find a
solution on the net. In my output below, I was able to set_value at the
first loop but not the second loop. The different check using print could
not identify what was the problem. I have attached my testset, function and
output below. Really appreciate if anyone can help me with this issue.
Thanks!
Regards
Gerald
Dataset plus processing:
Test_data as attached.
test_df = pd.read_csv("kargertest.txt", header = None, names = ["raw"])
test_df["raw_list"] = test_df["raw"].apply(lambda x : x.split('\t'))
test_df["vertexes"] = test_df["raw_list"].apply(lambda x : x[0])
test_df["edges"] = test_df["raw_list"].apply(lambda x : x[1:])
This is my function on min cut algorithm.
def min_cut(df,edges):
df2 = copy.deepcopy(df)
for i in range(len(df)):
print "df at start of loop is ", df2
if len(df2) == 2:
print len(df2)
print df2["edges"]
return len(df2["edges"].values[1])
else:
contract_edge = pick_rand(edges)
print "contract_edge is ", contract_edge
row_a = df2[df2['vertexes'] == contract_edge[0]]
row_b = df2[df2['vertexes'] == contract_edge[1]]
index_a = row_a.index[0]
index_b = row_b.index[0]
edges_a = row_a['edges'].tolist()[0]
edges_b = row_b['edges'].tolist()[0]
edges_a = filter(lambda a : a != contract_edge[1], edges_a)
edges_b = filter(lambda a : a != contract_edge[0], edges_b)
edges_c = edges_a + edges_b
print "edges_c is ", edges_c
print "index a of field edges is ", df2["edges"][index_a]
df2['edges'][index_a] = edges_c
print "df2 after setting value is", df2
df2 = df2.drop(index_b)
for x in range(len(df2)):
temp_list = df2.iloc[x]["edges"]
while contract_edge[1] in temp_list:
temp_list.remove(contract_edge[1])
temp_list.append(contract_edge[0])
df2["edges"][x] = temp_list
edges = filter(lambda a : a != contract_edge, edges)
edges = filter(lambda a : a != (contract_edge[1],
contract_edge[0]), edges)
for i in range(len(edges)):
if edges[i][0] == contract_edge[1]:
edges[i] = (contract_edge[0],edges[i][1])
if edges[i][1] == contract_edge[1]:
edges[i] = (edges[i][0],contract_edge[0])
edges = filter(lambda a : a != (contract_edge[0],
contract_edge[0]), edges)
My output is:
df at start of loop is
raw raw_list vertexes edges
0 1\t2\t3 [1, 2, 3] 1 [2, 3]
1 2\t1\t3\t4 [2, 1, 3, 4] 2 [1, 3, 4]
2 3\t1\t2\t4 [3, 1, 2, 4] 3 [1, 2, 4]
3 4\t2\t3 [4, 2, 3] 4 [2, 3]
contract_edge is ('4', '2')
edges_c is ['3', '1', '3']
index a of field edges is ['2', '3']
df2 after setting value is
raw raw_list vertexes edges
0 1\t2\t3 [1, 2, 3] 1 [2, 3]
1 2\t1\t3\t4 [2, 1, 3, 4] 2 [1, 3, 4]
2 3\t1\t2\t4 [3, 1, 2, 4] 3 [1, 2, 4]
3 4\t2\t3 [4, 2, 3] 4 [3, 1, 3]
df at start of loop is raw raw_list vertexes edges
0 1\t2\t3 [1, 2, 3] 1 [3, 4]
2 3\t1\t2\t4 [3, 1, 2, 4] 3 [1, 4, 4]
3 4\t2\t3 [4, 2, 3] 4 [3, 1, 3]
contract_edge is ('4', '3')
edges_c is ['1', '1']
index a of field edges is ['3', '1', '3']
df2 after setting value is
raw raw_list vertexes edges
0 1\t2\t3 [1, 2, 3] 1 [3, 4]
2 3\t1\t2\t4 [3, 1, 2, 4] 3 [1, 4, 4]
3 4\t2\t3 [4, 2, 3] 4 [3, 1, 3]
df at start of loop is
raw raw_list vertexes edges
0 1\t2\t3 [1, 2, 3] 1 [4, 4]
3 4\t2\t3 [4, 2, 3] 4 [1, 4, 4]
2
0 [4, 4]
3 [1, 4, 4]
1 [1, 4, 4]
Name: edges, dtype: object
-------------- next part --------------
1 2 3
2 1 3 4
3 1 2 4
4 2 3
More information about the Tutor
mailing list