根据垃圾箱创建列

时间:2018-10-24 05:08:07

标签: python pandas data-manipulation

我有一个数据:

# 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。

1 个答案:

答案 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) transformadd一起使用:

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