0

I need to reshape my dataframe

data = [
    ['Name 1', '17-11-2018', '2'],
    ['Name 2', '17-11-2018', '4'],
    ['Name 3', '17-11-2018', '6'],
    ['Name 1', '18-11-2018', '4'],
    ['Name 2', '18-11-2018', '6'],
    ['Name 3', '18-11-2018', '8'],
]
df = pd.DataFrame(data, columns = ['name', 'date', 'price'])
print(df)

  product        date price
0  Name 1  17-11-2018     2
1  Name 2  17-11-2018     4
2  Name 3  17-11-2018     6
3  Name 1  18-11-2018     4
4  Name 2  18-11-2018     6
5  Name 3  18-11-2018     8

I want to get such result:

name   17-11-2018 18-11-2018                        
Name 1          2          4
Name 2          4          6
Name 3          6          8

but my best solution was such with MultiIndex.

qty = pd.pivot_table(df, index='name', values='price', columns='date', aggfunc=np.sum, fill_value=0)
print(qty)

date   17-11-2018 18-11-2018
name                        
Name 1          2          4
Name 2          4          6
Name 3          6          8

Need some advise or solution how can I get the result, which I need.

bla bloa
  • 17
  • 5

1 Answers1

1

You can use reset_index to reset your index and rename_axis to rename you column index:

qty = pd.pivot_table(df, index='name', values='price', columns='date', aggfunc=np.sum, fill_value=0)\
        .reset_index()\
        .rename_axis(None, axis=1)

     name 17-11-2018 18-11-2018
0  Name 1          2          4
1  Name 2          4          6
2  Name 3          6          8

If you want name as index, only use rename_axis:

qty = pd.pivot_table(df, index='name', values='price', columns='date', aggfunc=np.sum, fill_value=0)\
        .rename_axis(None, axis=1)

       17-11-2018 18-11-2018
name                        
Name 1          2          4
Name 2          4          6
Name 3          6          8
Erfan
  • 40,971
  • 8
  • 66
  • 78
  • If the answer helped you, don't forget to accept as answer so others with the same question can be helped :) @blabloa – Erfan May 15 '19 at 09:41