[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