在列表上迭代函数,并追加返回的值

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的值.在钥匙.

我想有更好的方法可以做到这一点,但我仍然是这个东西的新手.非常感谢任何建议

The*_*eke 5

你可以使用辉煌的熊猫图书馆来完成这些工作:

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)

正如你在最后一行所看到的那样,你在问题中算错了......

你也可以要求中位数,总和,最大等.