Pivoting pandas dataframe by rank on id

JBSH
:

I'm currently trying to pivot my pandas DataFrame by 'id' on 'rank'

print(df)

     id  rank  year  
0   key0  1    2011  
1   key0  2    2012  
2   key0  3    2013  
3   key1  1    2014  
4   key1  2    2015  
5   key1  3    2016  
6   key2  1    2017 
7   key2  2    2018 
8   key2  3    2019 

Depending on the max('rank'), I want to create as many 'years' columns and give them values according to the ascending rank

print(df)

     id  rank1  year1  rank2  year2  rank3   year3  
0   key0   1     2011    2     2012    3      2013
1   key1   1     2014    2     2015    3      2016  
2   key2   1     2017    2     2018    3      2019

I tried my own solution (currently working, but I have ~2M rows and is not very effective)

df2= df.melt(id_vars=["id", "rank"], value_vars=[elem for elem in df.columns if elem not ['id','rank']])
df2['col_name'] =df2['variable']+ (df2['rang']-1).astype('str')
df2.value.fillna(0, inplace = True)
df2= pd.pivot_table(df2, index=["id"], columns=["col_name"], values="value", aggfunc=max)

I know that it is not the optimal solution and is memory consuming, here is why I'm asking for a better solution

Thanks in advance

jezrael
:

Use DataFrame.sort_values with DataFrame.pivot, sorting MultiIndex by DataFrame.sort_index and then flatten it by f-strings:

df1 = (df.sort_values(['id','rank'])
         .pivot(index="id",columns="rank", values=["year","rank"])
         .sort_index(axis=1, level=1))
df1.columns = [f'{a}{b}' for a, b in df1.columns]
df1 = df1.reset_index()
print (df1)
     id  rank1  year1  rank2  year2  rank3  year3
0  key0      1   2011      2   2012      3   2013
1  key1      1   2014      2   2015      3   2016
2  key2      1   2017      2   2018      3   2019

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Pandas dataframe pivoting

From Dev

Pivoting Dataframe with Pandas

From Dev

Pandas Dataframe Stacking versus Pivoting

From Dev

Resampling, grouping, pivoting a pandas dataframe

From Dev

Pivoting a pandas dataframe with duplicate index values

From Dev

Pivoting a Pandas dataframe with a gapless daterange as index

From Dev

pivoting pandas dataframe into prefixed cols, not a MultiIndex

From Dev

Pivoting a pandas dataframe to generate a (seaborn) heatmap

From Dev

How to efficiently columnize (=pivoting) pandas DataFrame (with groupby)?

From Dev

Pandas rank valus in rows of DataFrame

From Dev

Pivoting pandas DataFrame -- AssertionError: Index length did not match values

From Dev

Pivoting a Pandas Dataframe containing strings - 'No numeric types to aggregate' error

From Dev

Faster way to rank rows in subgroups in pandas dataframe

From Dev

How to rank columns of a dataframe by index? pandas

From Dev

Pivoting data in pandas

From Dev

Pandas: Pivoting and plotting workflow

From Dev

Pandas pivoting with boolean

From Dev

incrementally rank pandas dataframe subject to other boolean dataframe in panel

From Dev

dataframe slicing and pivoting then into multiple dataframes

From Dev

Select a certain value from a pandas dense rank dataframe

From Java

Assigning rank 2 numpy array to pandas DataFrame column behaves inconsistently

From Dev

Assigning rank 2 numpy array to pandas DataFrame column behaves inconsistently

From Dev

Groupby Pandas dataframe and drop values conditionally based on rank

From Dev

Multi-index pivoting in Pandas

From Java

Data wrangling with Python Pandas and pivoting

From Dev

Pivoting tables with duplicated data in pandas

From Dev

Pandas: Pivoting with multi-index data

From Dev

Pivoting (or reshaping) table in pandas into hierarchical columns

From Dev

How to rank DataFrame by subgroup

Related Related

  1. 1

    Pandas dataframe pivoting

  2. 2

    Pivoting Dataframe with Pandas

  3. 3

    Pandas Dataframe Stacking versus Pivoting

  4. 4

    Resampling, grouping, pivoting a pandas dataframe

  5. 5

    Pivoting a pandas dataframe with duplicate index values

  6. 6

    Pivoting a Pandas dataframe with a gapless daterange as index

  7. 7

    pivoting pandas dataframe into prefixed cols, not a MultiIndex

  8. 8

    Pivoting a pandas dataframe to generate a (seaborn) heatmap

  9. 9

    How to efficiently columnize (=pivoting) pandas DataFrame (with groupby)?

  10. 10

    Pandas rank valus in rows of DataFrame

  11. 11

    Pivoting pandas DataFrame -- AssertionError: Index length did not match values

  12. 12

    Pivoting a Pandas Dataframe containing strings - 'No numeric types to aggregate' error

  13. 13

    Faster way to rank rows in subgroups in pandas dataframe

  14. 14

    How to rank columns of a dataframe by index? pandas

  15. 15

    Pivoting data in pandas

  16. 16

    Pandas: Pivoting and plotting workflow

  17. 17

    Pandas pivoting with boolean

  18. 18

    incrementally rank pandas dataframe subject to other boolean dataframe in panel

  19. 19

    dataframe slicing and pivoting then into multiple dataframes

  20. 20

    Select a certain value from a pandas dense rank dataframe

  21. 21

    Assigning rank 2 numpy array to pandas DataFrame column behaves inconsistently

  22. 22

    Assigning rank 2 numpy array to pandas DataFrame column behaves inconsistently

  23. 23

    Groupby Pandas dataframe and drop values conditionally based on rank

  24. 24

    Multi-index pivoting in Pandas

  25. 25

    Data wrangling with Python Pandas and pivoting

  26. 26

    Pivoting tables with duplicated data in pandas

  27. 27

    Pandas: Pivoting with multi-index data

  28. 28

    Pivoting (or reshaping) table in pandas into hierarchical columns

  29. 29

    How to rank DataFrame by subgroup

HotTag

Archive