Python 用平均值替换每行的最大值

Python 用平均值替换每行的最大值,python,pandas,dataframe,Python,Pandas,Dataframe,我想用此行的平均值替换列中每行的最大值。我使用的方法需要花费大量时间才能完成。我正在使用熊猫数据帧。替换的平均值需要是一个整数,但具有正确的洪水分割。例如:如果值为3.2,则为3;如果值为3.8,则为4 我的慢解决方案: 我的数据帧: 身份证件 特点0 特点1 特点2 特点3 特点4 0 0 0 3. 1. 5. 1. 4. 0 4. 0 8. 2. 1. 21 4. 0 0 3. 0 11 0 0 2. df.values[rangelendf.index,np.argmaxdf.values

我想用此行的平均值替换列中每行的最大值。我使用的方法需要花费大量时间才能完成。我正在使用熊猫数据帧。替换的平均值需要是一个整数,但具有正确的洪水分割。例如:如果值为3.2,则为3;如果值为3.8,则为4

我的慢解决方案:

我的数据帧:

身份证件 特点0 特点1 特点2 特点3 特点4 0 0 0 3. 1. 5. 1. 4. 0 4. 0 8. 2. 1. 21 4. 0 0 3. 0 11 0 0 2. df.values[rangelendf.index,np.argmaxdf.values,axis=1]=df.meanaxis=1.round 行上的np.argmax告诉我们每行最大值的位置。然后,我们对df.values使用奇特的索引,并在行轴=1上指定平均值,但四舍五入

得到

    feature0  feature1  feature2  feature3  feature4
id
0          0         0         3         1         2
1          4         0         4         0         3
2          1         5         4         0         0
3          0         3         0         0         2
df.values[rangelendf.index,np.argmaxdf.values,axis=1]=df.meanaxis=1.round 行上的np.argmax告诉我们每行最大值的位置。然后,我们对df.values使用奇特的索引,并在行轴=1上指定平均值,但四舍五入

得到

    feature0  feature1  feature2  feature3  feature4
id
0          0         0         3         1         2
1          4         0         4         0         3
2          1         5         4         0         0
3          0         3         0         0         2

根据Mustafa的评论,这是一种更冗长的方式,包括:

化为长形 df=df.id idxmax/每行平均值的熔化id组 g=df.groupby'id'。值 索引=g.idxmax 平均值=g.transform'mean'。round.astypeint 将idxmax索引处的值更改为平均值 df.loc[指数,'值']=平均值.loc[指数] 转向宽型 df=df.pivotindex='id',columns='variable',values='value'。重命名\u axiscolumns=None
根据Mustafa的评论,这是一种更冗长的方式,包括:

化为长形 df=df.id idxmax/每行平均值的熔化id组 g=df.groupby'id'。值 索引=g.idxmax 平均值=g.transform'mean'。round.astypeint 将idxmax索引处的值更改为平均值 df.loc[指数,'值']=平均值.loc[指数] 转向宽型 df=df.pivotindex='id',columns='variable',values='value'。重命名\u axiscolumns=None
这给了我错误。在'str'和'int'@Niro实例之间不支持'>'的情况下,在执行上述操作之前,您是否可以执行df=df.set\u indexid.astypeint?这将把id列放在一边,并确保值是整数。嗯,我不知道你可以分配到df.values中,interesting@tdy您是否知道是否有一种方法可以在df本身上实现这一点?我相信这种索引有df.lookup,但其结果是不可赋值的。@MustafaAydın我知道的唯一方法是melt/groupby/pivot。它比这个.values方法要详细得多,但我发布了代码,以防有人感兴趣,我猜它会给我错误。在'str'和'int'@Niro实例之间不支持'>'的情况下,在执行上述操作之前,您是否可以执行df=df.set\u indexid.astypeint?这将把id列放在一边,并确保值是整数。嗯,我不知道你可以分配到df.values中,interesting@tdy您是否知道是否有一种方法可以在df本身上实现这一点?我相信这种索引有df.lookup,但其结果是不可赋值的。@MustafaAydın我知道的唯一方法是melt/groupby/pivot。它比这个.values方法要详细得多,但我发布了代码,以防有人感兴趣。我猜列的顺序破坏了一点,但它也起了作用。列的顺序破坏了一点,但它也起了作用。
    feature0  feature1  feature2  feature3  feature4
id                                                  
0          0         0         3         1         2
1          4         0         4         0         3
2          1         5         4         0         0
3          0         3         0         0         2