Python中的groupby会产生列还是数据帧?

2024-06-02 07:10:55 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数据帧作为

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

。。。你知道吗

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

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


Tags: 数据命令agetransformmax意义groupbykeyerror
2条回答

你在这里问了很多问题,但我要谈谈最主要的问题:

I want to replace all values in Late that are 46 or 48 with the median of 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

这里有一个很好的一行给你:

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

请记住,groupby并没有真正应用于您的案例,它返回一个DataFrame-ish对象

相关问题 更多 >