Python中的groupby是否会产生列或数据框?

时间:2015-10-22 21:37:53

标签: python numpy pandas

假设我有一个数据框

age Late
1     1
2     5
3     48
4     46
5     6

...

我想将Late中46或48的所有值替换为Late的中位数。我相信命令是

trainDF.groupby('Late').transform(getmedian)

然而,结果是整个数据帧trainDF?或者它只是Late列?

那就是,下面的内容是否有意义?

trainDF=trainDF.groupby('Late').transform(getmedian)

或者以下是否有意义?

newLate = trainDF.groupby('Late').transform(getmedian)

我试过

newLate = trainDF.groupby('Late').transform(getmedian)
newLate.max()

打印出Unnamed: 0

trainDF['newLate'].max()

打印出KeyError: 'newLate'

如果我尝试

trainDF=trainDF.groupby('Late').transform(getmedian)

并打印

trainDF['Late'].max()

它说KeyError: 'Late'

我应该怎么做才能存储替换Late中46和48值的新数据框?我问,因为我最终希望通过打印修改后的Late列的最大值确保其有效,并确保它显示6(或任何小于46的数字),而不是48

2 个答案:

答案 0 :(得分:2)

你在这里问了很多问题,但我会解决看起来很重要的问题:

  

我想将Late中的所有值替换为46或48,其中间值为Late。

你可以这样做:

>>> df = pd.DataFrame({'age': [1,2,3,4,5],
                       'Late': [1,5,48,46,6]})
>>> df.loc[df['Late'].isin([46, 48]), 'Late'] = df['Late'].median()
>>> df
   Late  age
0     1    1
1     5    2
2     6    3
3     6    4
4     6    5

答案 1 :(得分:1)

这是一个很好的衬垫:

trainDF["Late"].loc[(trainDF["Late"] == 48) | (trainDF["Late"] == 46)] = trainDF["Late"].median()

请记住,groupby并不真正适用于您的情况并且它返回DataFrame - ish对象