首页 > 解决方案 > 取相似行的列的平均值

问题描述

在此处输入图像描述

如果我的行具有相同的前缀,fromMp,toMp,我想做什么然后我取每个 TPCSpeed 1 的平均值

例如我有

              CF 116 117   54.8    56 50 50 50 50 50 
              CF 116 117   54.8    56 50 50 50 50 50 
              CF 116 117   54.8    56 50 50 50 50 50 

所以如果从 mp 到 mp 前缀和后缀的行共享相同,那么我想取所有共享此行的平均 TPC 1 例如 116 117 我有 TPC 1 (54.8+54.8+54.8)/(3)我想为共享相同信息的所有行取 tpc 1 列的平均值。如果行不共享相同的信息,我只想要 tpc 1。不确定如何执行此操作可能会重复。

我不知道如何在熊猫中做到这一点

import pandas as pd
import numpy as np


result=pd.read_csv("result.csv")
a1=result.columns.get_loc("TPCSpeed1")
a2=result.columns.get_loc("TPCSpeed2")
a3=result.columns.get_loc("TPCSpeed3")
a4=result.columns.get_loc("TPCSpeed4")
a5=result.columns.get_loc("TPCSpeed5")
a6=result.columns.get_loc("TPCSpeed6")
a7=result.columns.get_loc("TPCSpeed7")

pre=result.columns.get_loc("Prefix")
suf=result.columns.get_loc("Suffix")
FromMp=result.columns.get_loc("FromMP")
ToMp=result.columns.get_loc("ToMP")



w1=[]
w2=[]
w3=[]
w4=[]
w5=[]
w6=[]
w7=[]



prefix=[]
suffix=[]
begin=[]
end=[]


for index,row in result.iterrows():
    print(index)
    c1=row[pre]
    c2=row[suf]
    c3=row[FromMp]
    c4=row[ToMp]
    prefix.append(c1)
    suffix.append(c2)
    begin.append(c3)
    end.append(c4)
    
    
    b1=row[a1]
    w1.append(b1)
    b2=row[a2]
    w2.append(b2)
    b3=row[a3]
    w3.append(b3)
    b4=row[a4]
    w4.append(b4)
    b5=row[a5]
    w5.append(b5)
    b6=row[a6]
    w6.append(b6)
    b7=row[a7]
    w7.append(b7)

标签: pandas

解决方案


这是一个很好的用途groupby().agg()

最简单的,你可以试试:

result.groupbby(['Prefix', 'FromMP', 'ToMP', 'Suffix').agg(np.mean)

这将折叠所有四个命名列中具有相同值的所有行,然后将它们替换为具有其他每个列中的平均值的单行。您可以使用reset_index()它来返回原始数据框。

( aggaka aggregate) 函数相当灵活。您可以区别对待列。它不必是所有事物的平均值。

https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.aggregate.html


推荐阅读