pandas - 取相似行的列的平均值
问题描述
如果我的行具有相同的前缀,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)
解决方案
这是一个很好的用途groupby().agg()
。
最简单的,你可以试试:
result.groupbby(['Prefix', 'FromMP', 'ToMP', 'Suffix').agg(np.mean)
这将折叠所有四个命名列中具有相同值的所有行,然后将它们替换为具有其他每个列中的平均值的单行。您可以使用reset_index()
它来返回原始数据框。
( agg
aka aggregate
) 函数相当灵活。您可以区别对待列。它不必是所有事物的平均值。
https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.aggregate.html
推荐阅读
- docker - 用于 ssh 自动启动的 dockerfile ssh 僵尸进程
- css - 如何将 Bootstrap 列溢出/扩展/流血到视口的边缘?
- android - 来自协程的 ANR
- swift - 协议中的关联类型与真正的泛型协议相比有哪些优缺点?
- ms-access - 为什么我的访问表单在保存时会更改我的字段?
- android - GridLayoutManager 为同一行中的项目提供相同的高度
- multithreading - DiscardAsyncTimer 在计时器回调完成之前返回
- ionic-framework - IONIC4背景图像在键盘打开时调整大小
- python - 无法使用正则表达式获得自定义结果
- python - LeetCode 上的两个 Sum 没有按预期返回