2017-08-11 45 views
2

大家好,所以我在我的数据框下面的列:集团GROUPBY

 LC_REF 
1 DT 16 2C 
2 DT 16 2C 
3 DT 16 2C 

1 DT 16 3C 
6 DT 16 3C 
3 DT 16 3C 
7 DT 16 3C 

0 DT 17 1C 
0 DT 17 1C 
0 DT 17 1C 
1 DT 17 1C 

0 DT 17 2C 
2 DT 17 2C 
4 DT 17 2C 
5 DT 17 2C 

4 DT 17 3C 
1 DT 17 3C 
8 DT 17 3C 

我想知道,如果它可以组织各组LC_REF的,使得该指数是按升序排列的:

 LC_REF 
1 DT 16 2C 
2 DT 16 2C 
3 DT 16 2C 

1 DT 16 3C 
3 DT 16 3C 
6 DT 16 3C 
7 DT 16 3C 

0 DT 17 1C 
0 DT 17 1C 
0 DT 17 1C 
1 DT 17 1C 

0 DT 17 2C 
2 DT 17 2C 
4 DT 17 2C 
5 DT 17 2C 

1 DT 17 3C 
4 DT 17 3C 
8 DT 17 3C 

到目前为止,我曾尝试:

df.groupby('LC_REF').apply(pd.DataFrame.sort_index,'LC_REF',1) 
grouped = df.groupby('LC_REF').sum().reset_index() 

但这并不能给出正确的输出。

+0

'reset_index'和'sort_values' – Wen

+0

好像我是想用GROUPBY – codeninja

回答

3

我觉得更好的是使用reset_index列从index,然后sort_values和最后set_index

df = df.reset_index().sort_values(['LC_REF','index']).set_index('index').rename_axis(None) 
print (df) 
    LC_REF 
1 DT 16 2C 
2 DT 16 2C 
3 DT 16 2C 
1 DT 16 3C 
3 DT 16 3C 
6 DT 16 3C 
7 DT 16 3C 
0 DT 17 1C 
0 DT 17 1C 
0 DT 17 1C 
1 DT 17 1C 
0 DT 17 2C 
2 DT 17 2C 
4 DT 17 2C 
5 DT 17 2C 
1 DT 17 3C 
4 DT 17 3C 
8 DT 17 3C 
+1

哇...我只是张贴评论超过它复杂~~~ :-)良好的解决方案+1 – Wen

+0

@jezrael看起来像我是太多w groupby,我只是需要sort_values ...似乎明显的事后回顾 – codeninja

+0

@codeninja - 我认为'groupby'这里是第一个想法,所以没问题。 :) – jezrael

1
df = pd.read_table(StringIO(""" 
id LC_REF 
1 DT 16 2C 
2 DT 16 2C 
3 DT 16 2C 
1 DT 16 3C 
6 DT 16 3C 
3 DT 16 3C 
7 DT 16 3C 
0 DT 17 1C 
0 DT 17 1C 
0 DT 17 1C 
1 DT 17 1C 
0 DT 17 2C 
2 DT 17 2C 
4 DT 17 2C 
5 DT 17 2C 
4 DT 17 3C 
1 DT 17 3C 
8 DT 17 3C"""), sep = ' ') 

df.sort_values(['LC_REF', 'id'],ascending=True) 
+0

列ID来自哪里? – Wen

+0

@Wen,我将列名称命名为索引,它已被显示为索引 –

0

或作为我的意见,那就是去第一好办法。但是,如果你你想使用groupby试试这个

df.groupby('LC_REF',as_index=False).apply(pd.DataFrame.sort_index)