So, by your data (sparse frequencies and amplitudes), you don't need a "Fourier Transform", just a sum of a fourier series.
As for the frequency curve, it comes straight from the data without transformations.
So, here is my suggestion, where a signal and a frequency curve can be produced:

Nodes
There is a group that creates the signal and another that creates the frequency curve.
I added a "phase" attribute for the sake of completeness, but it will not affect the result if you don't have the attribute.

Frequency Curve group
This groups simply plots a line with N points, N being the maximum frequency you expect to see + 1.
Important: I don't have blender 4.3, so I used a "Repeat Zone", but you will definitely get a better performance using "For Each Element" to avoid the "Separate Geometry" node with a selection.
Fun Fact: If you're able to provide full data for all the frequencies (including frequencies with amplitude 0), and sorted by frequency, you can avoid the loop too by setting position sampling the point with the same index - this probably increases performance significantly.
The idea is:
- Loop the data points
- Set the position on the curve selecting the point whose index is equal to the frequency
- The height of this point is the amplitude

Fourier Series
Here, since we have discrete frequencies, a "transformation" does not really apply, we just sum the cosine components using the data
Here I used some geometry tricks to avoid a loop (loops in blender are very costly)
The main idea is:
- For each X, sum the data point components which are
amp * cos(x * 2pi * freq + phase)
I added a "phase" even though it's not in your data, if you leave it empty, phase is considered zero.
Explanation:
To avoid looping, I created a grid:
- The grid has the same number of points in the X direction as the curve we will generate, their positions equal to the X positions on the curve
- And in the Y direction there are a number equal to the data points, their positions being the index of the data point
For each point on the curve, we sample an accumulation of the Y (data points) dimension of the grid:
- Grid X groups the accumulation and serves as the X input for the cosine
- Grid Y samples the respective data point
For some reason, choosing lengths lower than 1 cause bugs, I believe it's a rounding issue in the group ID, but I'm not sure. I didn't see the bug with lengths >= 1, though.

About dynamic edits
Unfortunately I have no good idea about how to make it dynamic when importing a CSV. The only way I can see it working dynamically is by creating a node group with a few frequencies and sliding these frequencies by hand.
Maybe you could use the position of the points as values (instead of attributes) and grab their positions to change values dynamically.
For instance, create a node group that sets the position of the points:
- X = frequency
- Y = amplitude
And in the Fourier nodes, sample X and Y of the points instead of the attributes. Then you can probably grab the points to vary the values.
Fourier transforms
I believe the above solves your question, although I haven't provided a fourier transform.
It's possible to create transforms that work like numpy.fft.rfft though, but they would add extra computation / complication for less precise results and a lack of freedom in curve resolutions.
File
