My DataFrame line index and column index store x and y values, while the data values are z values, i.e. f(x, y).
Let’s take an example:
import pandas as pd
df = pd.DataFrame([[150, 120, 170], [190, 160, 130]],
                  index=[2, 4], columns=[10, 30, 70])
print(df)
#     10   30   70
# 2  150  120  170
# 4  190  160  130
then f(4, 30) is 160.
I would like to make a 3D plot of function f. I don’t really mind if it looks like a 3D histogram or a surface plot – both answers would be appreciated.
Advertisement
Answer
You need to create a meshgrid from your row and col indices and then you can use plot_surface:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame([[150, 120, 170], [190, 160, 130]],
                  index=[2, 4], columns=[10, 30, 70])
x,y = np.meshgrid(df.columns, df.index)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x, y, df)
