这个问题建立在我最近提出的另一个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
函数不是很熟悉,但是可以在其中创建一个条件语句来捕获一年中所有值都丢失的情况吗?
答案 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