另一列中唯一值的列中值的平均值

Mau*_*rus 5 python mean tabular

我正在使用 Python 2.7 (Anaconda) 来处理表格数据。我加载了一个包含两列的文本文件,例如

[[ 1.  8.]
 [ 2.  4.]
 [ 3.  1.]
 [ 4.  5.]
 [ 5.  6.]
 [ 1.  9.]
 [ 2.  0.]
 [ 3.  7.]
 [ 4.  3.]
 [ 5.  2.]]
Run Code Online (Sandbox Code Playgroud)

我的目标是计算第二列中与第一列中唯一值匹配的所有值的平均值,例如,1 的平均值为 8.5,2 的平均值为 2,3 的平均值为 4。首先,我通过提取列并应用 np.unique() 导致数组“唯一”过滤掉了第一列中的唯一值。我创建了一个在定义唯一值时起作用的循环:

mean= 0
values=[]
for i in range(0,len(first),1):
    if first[i]==1:
        values.append(second[i])
print(np.mean(values))
Run Code Online (Sandbox Code Playgroud)

其中第一和第二是特定的列。现在我想让这不那么具体。我试过

mean = 0
values = []
means=[]

for i in unique:
    for k in range(0,len(first),1):
        if first[k]==i:
            values.append(second[k])
            mean = np.mean(values)
            means.append(mean)
    mean=0
    values=[]
print(means)
Run Code Online (Sandbox Code Playgroud)

但它只返回原始的第二列。有人知道如何使此代码非特定吗?实际上,我有大约 70k 行,所以我不能手动完成。

Neh*_*ani 5

在 pandas 中,您可以通过使用groupby来实现这一点:

In [97]: data
Out[97]: 
array([[ 1.,  8.],
       [ 2.,  4.],
       [ 3.,  1.],
       [ 4.,  5.],
       [ 5.,  6.],
       [ 1.,  9.],
       [ 2.,  0.],
       [ 3.,  7.],
       [ 4.,  3.],
       [ 5.,  2.]])

In [98]: import pandas as pd

In [99]: df = pd.DataFrame(data, columns=['first', 'second'])

In [100]: df.groupby('first').mean().reset_index()
Out[100]: 
   first  second
0    1.0     8.5
1    2.0     2.0
2    3.0     4.0
3    4.0     4.0
4    5.0     4.0
Run Code Online (Sandbox Code Playgroud)