我想创建一个新列,其中分箱值按另一列分组。按年分类的样本数据集如下所示:
Year A Bin
1999 1 [1-3]
1999 3 [1-3]
1999 10 [10-11]
1999 11 [10-11]
2000 43 [39-43]
2000 39 [39-43]
2000 22 [20-23]
2000 21 [20-23]
2001 11 [10-11]
2001 10 [10-11]
2001 198 [185-200]
2001 188 [185-200]
我已经使用了pd.cut
,但是我很难在每年内将它移植到bin中,而不是整个列。
我尝试使用此功能,但收到错误:TypeError: 'Series' object is not callable
。
def var_to_bins(dataset, var, num_bins):
dataset[str(var)+'_test'] = dataset.groupby(dataset.survyear(pd.cut(dataset[var], num_bins)))
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
我认为需要:
dataset['Bins'] = dataset.groupby('Year')['A'].transform(lambda x: pd.cut(x, 2))
print (dataset)
Year A Bin Bins
0 1999 1 [1-3] (0.99, 6.0]
1 1999 3 [1-3] (0.99, 6.0]
2 1999 10 [10-11] (6.0, 11.0]
3 1999 11 [10-11] (6.0, 11.0]
4 2000 43 [39-43] (32.0, 43.0]
5 2000 39 [39-43] (32.0, 43.0]
6 2000 22 [20-23] (20.978, 32.0]
7 2000 21 [20-23] (20.978, 32.0]
8 2001 11 [10-11] (9.812, 104.0]
9 2001 10 [10-11] (9.812, 104.0]
10 2001 198 [185-200] (104.0, 198.0]
11 2001 188 [185-200] (104.0, 198.0]