Shuffle rows by a column in pandas

后端 未结 2 1272
礼貌的吻别
礼貌的吻别 2021-01-21 21:40

I have the following example of dataframe.

    c1     c2
0   1       a
1   2       b
2   3       c
3   4       d
4   5       e

Given a template

2条回答
  •  爱一瞬间的悲伤
    2021-01-21 22:21

    If values are unique in list and also in c1 column use reindex:

    df = df.set_index('c1').reindex(c1).reset_index()
    print (df)
       c1 c2
    0   3  c
    1   2  b
    2   5  e
    3   4  d
    4   1  a
    

    General solution working with duplicates in list and also in column:

    c1 = [3, 2, 5, 4, 1, 3, 2, 3]
    
    #create df from list 
    list_df = pd.DataFrame({'c1':c1})
    print (list_df)
       c1
    0   3
    1   2
    2   5
    3   4
    4   1
    5   3
    6   2
    7   3
    
    #helper column for count duplicates values
    df['g'] = df.groupby('c1').cumcount()
    list_df['g'] = list_df.groupby('c1').cumcount()
    
    #merge together, create index from column and remove g column
    df = list_df.merge(df).drop('g', axis=1)
    print (df)
       c1 c2
    0   3  c
    1   2  b
    2   5  e
    3   4  d
    4   1  a
    5   3  c
    

提交回复
热议问题