Not sure - cursor can help me. But is there any way for such comparison and update the column?

Thanks

adding another complication- field E which has the maximum D for every unique A or C; so it will be:

A C D E
0.2 1 1 3
0.2 1 2 3
0.2 1 3 3
0.4 2 1 1
0.5 3 1 2
0.5 3 2 2

Because my ultimately goal is to keep only D ==1 and label the remained points with C and E (say: there are 3 points at location 1)

A C D E
0.2 1 1 3
0.4 2 1 1
0.5 3 1 2

Right now appears, I have to run another combination of search and update cursor after calculation of C and D but if there is any other concise and sleek approach! If I will figure it out - I will post it here!

Without indents, I'm not sure what you mean your code to do. From the table you gave, it looks like you want C to count the number of unique values up to that point, and D to count the number of times the current value of A has recurred (so once is 1, twice in a row is 2, etc.) If this is right, and if the values in A are ascending, this should work (I'm at home so I can't check with arcpy, unfortunately):

import arcpy
# create the cursor and populate the C and D fields of the
# first row.
cur = arcpy.UpdateCursor('TableNameHere')
row = cur.next()
last = row.getValue('A') # the last value in field A
row.setValue('C', 1)
row.setValue('D', 1)
cur.updateRow(row)
run = 1 # how many values in this run
count = 1 # how many runs so far, including the current one
# the for loop should begin from row 2, since
# cur.next() has already been called once.
for row in cur:
current = row.getValue('A')
if current == last:
run += 1
else:
run = 1
count += 1
row.setValue('C', count)
row.setValue('D', run)
cur.updateRow(row)
last = current
# release the layer from locks
del row, cur

Substitute the path of your table for TableNameHere and the correct field names for A, B and C, of course.