我有一个数据:
# dt
Column1
1
2
3
4
5
6
7
8
9
我想通过bin的最小值和最大值平均值创建一个新列。
# dt
Column1 Column2
1 2
2 2
3 2
4 5
5 5
6 5
7 8
8 8
9 8
pd.qcut(dt['Column1'], 3)
所以column2 =(bin的最小值+ bin的最大值)/ 2。
答案 0 :(得分:1)
将GroupBy.transform
与lambda函数一起使用以返回TypeError: list indices must be integers or slices, not datetime.datetime
,其大小与原始Series
相同:
DataFrame
或将dt['Column2'] = (dt.groupby(pd.qcut(dt['Column1'], 3))['Column1']
.transform(lambda x: x.max() + x.min()) / 2)
和transform
与add
一起使用:
div
编辑:
g = dt.groupby(pd.qcut(dt['Column1'], 3))
dt['Column2'] = g['Column1'].transform('max').add(g['Column1'].transform('min')).div(2)
print (dt)
Column1 Column2
0 1 2.0
1 2 2.0
2 3 2.0
3 4 5.0
4 5 5.0
5 6 5.0
6 7 8.0
7 8 8.0
8 9 8.0