我有一个类似于下面的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
答案 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