【问题标题】:ValueError: Bin edges must be unique:ValueError:Bin 边缘必须是唯一的:
【发布时间】:2018-03-15 16:58:01
【问题描述】:

这个问题建立在我最近提出的另一个question 之上。我有以下示例数据集:

Year    A
1999    1
1999    3
1999    10
1999    11
2000    43
2000    39
2000    22
2000    21
2001    NaN
2001    NaN
2001    NaN
2001    NaN

我运行以下代码并获得ValueError: Bin edges must be unique

dataset['Bins'] = dataset.groupby('Year')['A'].transform(lambda x: pd.cut(x, 2))
print (dataset)

由于这是按年份分组的,并且2001 包含所有缺失值,因此我理解引发错误的原因。一些建议的解决方案是删除所有重复项,但我想保留所有 NaN。

理想情况下,我应该有一个如下所示的数据集:

Year    A   Bins
1999    1   (0.99, 6.0]
1999    3   (0.99, 6.0]
1999    10  (6.0, 11.0]
1999    11  (6.0, 11.0]
2000    43  (32.0, 43.0]
2000    39  (32.0, 43.0]
2000    22  (20.978, 32.0]
2000    21  (20.978, 32.0]
2001    NaN NaN
2001    NaN NaN
2001    NaN NaN
2001    NaN NaN

我对@9​​87654327@ 函数不是很熟悉,但是否可以在其中创建一个条件语句来捕获一年中所有值都丢失的情况?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为您的问题是所有 NaN 的组。让我们通过以下方式避免这个问题:

    df.groupby('Year')['A'].transform(lambda x: np.nan if x.isnull().all() else pd.cut(x, 2))
    

    输出:

    0        (0.99, 6.0]
    1        (0.99, 6.0]
    2        (6.0, 11.0]
    3        (6.0, 11.0]
    4       (32.0, 43.0]
    5       (32.0, 43.0]
    6     (20.978, 32.0]
    7     (20.978, 32.0]
    8                NaN
    9                NaN
    10               NaN
    11               NaN
    Name: A, dtype: object
    

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 2017-11-22
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2017-09-20
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多