Pandas数据帧:在一个col中平均值,因为另一个col有重复

时间:2017-09-22 17:35:25

标签: python pandas dataframe duplicates

我有一个类似于下面的pandas数据框:

   Time    B    C  
   10:06   2    5
   10:07   5    3
   10:07   4    1 
   10:08   7    3
   10:08   9    4
   10:08   5    6

如果'次'我想平均cols B和C中的值。是平等的。我有以下代码,但我意识到我没有做出以下情况的一般情况: 1.没有重复 2.同一分钟内超过3个读数

是否有更有效和通用的方法来做到这一点?

    rowF = len(B)
    while i < rowF -1:

    if (df.loc[i, 'Time'] == df.loc[i+1, 'Time']):
        if(df.loc[i,'Time'] == df.loc[i+2, 'Time']):
            a = df.loc[i:i+2,'B']
            avg = sum(a)/float(len(a))
            average.append(avg)
            print(average)
        else:
            a = df.loc[i:i+1,'B']
            avg = sum(a)/float(len(a))
            average.append(avg)
            print(average)

    df1['B'] = average
    i+=1

预期产出:

    Time    B     C  
   10:06   2      5
   10:07   4.5    2
   10:08   7     4.3

1 个答案:

答案 0 :(得分:1)

您可以使用groupby功能:

df = pd.DataFrame({'Time': ['10:06', '10:07', '10:07', '10:08', '10:08', '10:08'],
                   'B': [2, 5, 4, 7, 9, 5],
                   'C': [5, 3, 1, 3, 4, 6]})

df.groupby('Time').mean()

这将返回每列的平均值,按索引值分组:

         B         C
Time
10:06  2.0  5.000000
10:07  4.5  2.000000
10:08  7.0  4.333333