【问题标题】:sorting pandas dataframes according to cut in python?根据python中的cut对pandas数据帧进行排序?
【发布时间】:2013-10-15 09:46:41
【问题描述】:

如果我使用pandas.cut 生成像[0.3, 0.5), ... 这样的bin 标签,我如何根据这些bin 按升序对数据帧进行排序?例如。 [-0.4, -0.2) 应该在[-0.2, 0.0) 之前,等等。例如:

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

现在如何根据cutdf["bins"] 列)生成的标签对 df 进行排序?

【问题讨论】:

  • 您能不能先对“a”列进行排序?然后df.sort(columns=['a'],inplace=True) df["bins"] = pd.cut(df.a, np.linspace(-2,2,6)) 将在为新的“bins”列应用剪切之前订购它
  • 或者你可以在应用 cut 之后对 'a' 进行排序会达到同样的效果

标签: python sorting pandas


【解决方案1】:

如果您先按“a”列对 df 进行排序,则不需要对“bins”列进行排序

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]

【讨论】:

    【解决方案2】:

    自 pandas .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
    

    【讨论】:

      猜你喜欢
      • 2017-06-30
      • 2020-05-19
      • 2015-09-16
      • 2017-03-08
      • 1970-01-01
      • 2020-02-29
      • 2019-04-26
      • 2019-09-23
      • 2018-03-15
      相关资源
      最近更新 更多