【问题标题】:Setting specific bin length in python list在 python 列表中设置特定的 bin 长度
【发布时间】:2020-05-13 13:31:25
【问题描述】:

我有一个直截了当的问题,但我遇到了转换问题。

我有一个转换为列表的 pandas 数据框列。它既有正值又有负值:

bin_length = 5

列表 = [-200, -112, -115, 0, 50, 120, 250]

我需要将这些数字分组到一个长度为 5 的 bin 中。

例如:

-100 到 -95 的值应为 -100

-95 到 -90 的值应为 -95

对于正值也是如此:

0 到 5 应该是 5

5 到 10 应该是 10

到目前为止我所尝试的:

df = pd.DataFrame(dataframe['rd2'].values.tolist(), columns = ['values'])
bins = np.arange(0, df['values'].max() + 5, 5)
df['bins'] = pd.cut(df['values'], bins, include_lowest = True)

但这不考虑负值,然后我在将熊猫间隔转换为单独的列表列时遇到问题。

任何帮助都会很棒。

【问题讨论】:

  • 为什么你的范围从 0 开始而不是 bins = np.arange(df["values"].min(), df['values'].max() + 5, 5)
  • 修复了这个问题。如何将间隔转换为列表?

标签: python-3.x pandas list


【解决方案1】:

使用np.arange 设置正确的下限:

bins = np.arange(df["values"].min(), df['values'].max() + 5, 5)
df['bins'] = pd.cut(df['values'], bins, include_lowest = True)

print (df)

   values                bins
0    -200  (-200.001, -195.0]
1    -112    (-115.0, -110.0]
2    -115    (-120.0, -115.0]
3       0         (-5.0, 0.0]
4      50        (45.0, 50.0]
5     120      (115.0, 120.0]
6     250      (245.0, 250.0]

将区间转换回列表:

s = pd.IntervalIndex(df["bins"])

print ([[x,y] for x,y in zip(s.left, s.right)])

[[-200.001, -195.0], [-115.0, -110.0], [-120.0, -115.0], [-5.0, 0.0], [45.0, 50.0], [115.0, 120.0], [245.0, 250.0]]

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2010-11-02
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2017-05-27
    相关资源
    最近更新 更多