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