For example,I have a table like this.

Then I want to use pandas to transform it like this
How can I do this.thx!
For example,I have a table like this.

Then I want to use pandas to transform it like this
How can I do this.thx!
 
    
    df = df.pivot(index='name', columns='media', values='amount')
df = df.set_index(['name','media')]['amount'].unstack()
If duplicates in pairs name and media need pivot_table or aggregate with groupby and aggregate mean can be changed to sum, median, ..., last reshape by unstack:
df = df.pivot_table(index='name', columns='media', values='amount', aggfunc='mean')
df = df.groupby(['name','media')]['amount'].mean().unstack()
 
    
    Using pd.factorize
f1, u1 = pd.factorize(df.name.values)
f2, u2 = pd.factorize(df.media.values)
pd.DataFrame(
    np.bincount(
        f1 * u2.size + f2, df.amount.values, u1.size * u2.size
    ).reshape(u1.size, u2.size).astype(df.amount.dtype),
    u1, u2
)
         TV  internet  newspaper
andy      6        10         18
steve     8         0          0
richard   0        14          9
