I have a large data set of points, all of which lie on a river network and have x, y co-ordinates. I want to calculate the slope of the river channel at each point from the underlying DEM by taking the elevation at each point and the elevation of a point on the network 1km upstream. The best way I can think of doing this is by creating a line upstream from each point that stops when it reaches 1km away (obviously the line will not be straight in most instances), then create a point at the end of that line. I guess the flow direction or accumulation layer could be used to draw the line in the correct direction (upstream) from each point but I don't know where to start!
This is a little difficult because of the branching nature of stream networks. Over 1km you will likely need your solution to be able to make a choice of which branch/tributary to trace up. I suggest calculating Horton stream order for your stream lines and then dissolving features based on the Horton order field. Once that is done you can create a point 1km upstream in python by using the shapely library and the .interpolate() function.