Python- Adding menu button to add duplicate of active object at 3D cursor
For UI layout layout.operator you only need the names after bpy.ops, in your case

        row.operator("object.duplicate")


Always check the system console for error messages if something isn't working

row.operator(bpy.ops.object.duplicate())


will write to system console

Traceback (most recent call last):
 File "/Text", line 32, in draw
 File "/home/batfinger/src/BlenderGIT/qtcreator_build/bin/2.77/scripts/modules/bpy/ops.py", line 189, in __call__
 ret = op_call(self.idname_py(), None, kw)
RuntimeError: Calling operator "bpy.ops.object.duplicate" error, can't modify blend data in this state (drawing/rendering)


If you don't want the panel to show when there is no active_object add a poll method

    @classmethod
    def poll(cls, context):
        return context.active_object is not None


or not as the operator will display as disabled when there is no active object.