2017-08-10 56 views
1

我有一個數據幀這樣:重新排列指數移動字符串到頂部

LC_REF  a  vals 
0 DT 16 2C  a  Jon,Foo,Bar 
1 DT 16 2C  a  Foo,bar,foobar,random,info 
2 DT 16 2C  a  random, teddy, roosevelt 
3 DT 16 3C  a  filler, info 
4 DT 16 3C  a  apple 
5 DT 16 3C  a  foobar,foo,bar 
6 DT 16 3C  a  foobar 
7 DT 17 1C  a  random,info,to,be,moved 
8 DT 17 1C  a  apple 
9 DT 17 1C  a  foo, aabr 
10 DT 17 1C a  aabr,foo 
11 DT 17 2C a  touchy 
12 DT 17 2C a  wtf 
13 DT 17 2C a  foo,bar 
14 DT 17 3C a  do 
15 DT 17 3C a  tetris 

我想GROUPBY LC_REF和移動「蘋果」到每個GROUPBY的頂部,同時保持相同的順序。所以,最後的結果將有希望是這樣的:

LC_REF  a  vals 
0 DT 16 2C  a  Jon,Foo,Bar 
1 DT 16 2C  a  Foo,bar,foobar,random,info 
2 DT 16 2C  a  random, teddy, roosevelt 
4 DT 16 3C  a  apple 
3 DT 16 3C  a  filler, info 
5 DT 16 3C  a  foobar,foo,bar 
6 DT 16 3C  a  foobar 
8 DT 17 1C  a  apple 
7 DT 17 1C  a  random,info,to,be,moved 
9 DT 17 1C  a  foo, aabr 
10 DT 17 1C a  aabr,foo 
11 DT 17 2C a  touchy 
12 DT 17 2C a  wtf 
13 DT 17 2C a  foo,bar 
14 DT 17 3C a  do 
15 DT 17 3C a  tetris 

我已經試過了某種變化與GROUPBY和重新索引無濟於事:

df.groupby('LC_REF').reindex(['apple']) 

,但我真的不知道怎麼這個詞語法,或者如果我甚至在正確的軌道上。感謝您尋找

回答

3

其中一個方法是用雙.loc增量和指標值的遞減,即

df = df.reset_index() 

df.loc[df.loc[df['vals'].str.contains('apple'),'index']-1,'index']+=1 
df.loc[df['vals'].str.contains('apple'),'index']-=1 
df = df.set_index('index',drop=True).sort_index() 

輸出:

 
     LC_REF a      vals 
index           
0  DT 16 2C a     Jon,Foo,Bar 
1  DT 16 2C a Foo,bar,foobar,random,info 
2  DT 16 2C a random, teddy, roosevelt 
3  DT 16 3C a      apple 
4  DT 16 3C a    filler, info 
5  DT 16 3C a    foobar,foo,bar 
6  DT 16 3C a      foobar 
7  DT 17 1C a      apple 
8  DT 17 1C a  random,info,to,be,moved 
9  DT 17 1C a     foo, aabr 
10  DT 17 1C a     aabr,foo 
11  DT 17 2C a      touchy 
12  DT 17 2C a       wtf 
13  DT 17 2C a      foo,bar 
14  DT 17 3C a       do 
15  DT 17 3C a      tetris 

希望它可以幫助

+1

美麗,它的工作,謝謝!我還有很多東西要學習熊貓和Python,看起來好像是 – codeninja

+0

總有一個可以學習的空間。樂意效勞 – Dark