ValueError:Bin边必须是唯一的:

时间:2018-03-15 16:58:01

标签: python pandas

这个问题建立在我最近提出的另一个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

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

1 个答案:

答案 0 :(得分: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