0

For example,I have a table like this. enter image description here

Then I want to use pandas to transform it like this

enter image description here

How can I do this.thx!

Chunk_Ning
  • 113
  • 2
  • 8
  • 1
    Possible duplicate of [How to pivot a dataframe in Pandas?](https://stackoverflow.com/questions/28337117/how-to-pivot-a-dataframe-in-pandas) – Zero Aug 11 '17 at 12:46
  • and https://stackoverflow.com/q/31802574 – Zero Aug 11 '17 at 12:47

2 Answers2

2

Use pivot or unstack:

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()
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
0

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
piRSquared
  • 285,575
  • 57
  • 475
  • 624