use*_*220 1 python counter average function
我有一个CSV数据集,40列乘800行.但举个例子可以说它看起来像这样:
Ref X Y
11 1 10
11 2 9
11 3 8
11 4 7
12 5 6
12 6 5
12 7 4
13 8 3
13 9 2
Run Code Online (Sandbox Code Playgroud)
您将如何定义一个函数,该函数返回每个Ref的平均X和Y值的列表?即产生如下:
Ref_list = [11,12,13]
Av_X = [2.5,6,12.5]
Run Code Online (Sandbox Code Playgroud)
我怀疑这是接近它的最佳方式,但我编写了以下代码:
my_data = genfromtxt('somedata.csv', delimiter=',',skiprows=1)
X=[]
for i in my_data:
X.append(i[0])
counter=collections.Counter(X)
keys=np.sort((counter.keys())) #find and sort ref key values
def getdata():
X , Y = [], []
for i in my_data:
if i[0] == refs:
X.append(i[1])
Y.append(i[2])
AV_X=np.average(X)
AV_Y=np.average(X)
return AV_X, AV_Y
for refs in keys: # run function over key range
AV_X, AV_Y = getdata()
Run Code Online (Sandbox Code Playgroud)
在这里我卡住了,我试图在ref的范围内迭代函数.(键)并附加返回的值.但除了错误,我只能得到最后一个Ref的值.在钥匙.
我想有更好的方法可以做到这一点,但我仍然是这个东西的新手.非常感谢任何建议
你可以使用辉煌的熊猫图书馆来完成这些工作:
from StringIO import StringIO
import pandas as pd
df = pd.read_csv(StringIO('your_data'),
delim_whitespace=True)
df.groupby('Ref').mean()
X Y
Ref
11 2.5 8.5
12 6.0 5.0
13 8.5 2.5
Run Code Online (Sandbox Code Playgroud)
正如你在最后一行所看到的那样,你在问题中算错了......
你也可以要求中位数,总和,最大等.