2013-10-08 69 views
4

如果我使用pandas.cut來生成垃圾箱標籤,如[0.3, 0.5), ...,我如何按照這些垃圾箱升序排列數據框?例如。 [-0.4, -0.2)應該來[-0.2, 0.0)之前,等等。例如:根據python中的cut來排序大熊貓數據框?

df = pandas.DataFrame({"a": np.random.randn(10)}) 
# bin according to cut 
df["bins"] = pandas.cut(df.a, np.linspace(-2,2,6)) 

現在你怎麼能排序根據cut(在df["bins"]列)生成的標籤df,可以?

+0

難道你不能只是先排序列「a」? 'df.sort(columns = ['a'],inplace = True)df [「bins」] = pd.cut(df.a,np.linspace(-2,2,6))'然後預先命令它在新的「箱子」欄中應用切割 – EdChum

+0

或者,您可以在應用「切割」後對「a」進行排序,以達到同樣的效果 – EdChum

回答

7

如果排序列df,可以「一」第一,那麼你就不需要了「垃圾箱」列

import pandas as pd 
import numpy as np 
df = pd.DataFrame({"a": np.random.randn(10)}) 
# for versions older than 0.17.0 
df.sort(by=['a'],inplace=True) 
# if running a newer version 0.17.0 or newer then you need 
df.sort_values(by=['a'],inplace=True) 
# bin according to cut 
df["bins"] = pd.cut(df.a, np.linspace(-2,2,6)) 
df 

Out[37]: 
      a   bins 
6 -1.273335 (-2, -1.2] 
7 -0.604780 (-1.2, -0.4] 
1 -0.467994 (-1.2, -0.4] 
8 0.028114 (-0.4, 0.4] 
9 0.032250 (-0.4, 0.4] 
3 0.138368 (-0.4, 0.4] 
0 0.541577 (0.4, 1.2] 
5 0.838290 (0.4, 1.2] 
2 1.171387 (0.4, 1.2] 
4 1.770752  (1.2, 2] 
0

由於熊貓0.17排序,排序的新方法是使用sort_values。首選解決方案變爲:

import pandas as pd 
import numpy as np 
df = pd.DataFrame({"a": np.random.randn(10)}) 
df.sort_values('a',inplace=True) 
# bin according to cut 
df["bins"] = pd.cut(df.a, np.linspace(-2,2,6)) 
df