Python Pandas dataframe:平均一个列中的值,因为另一个列具有重复项
我有一个类似于下面的数据框:Python Pandas dataframe:平均一个列中的值,因为另一个列具有重复项,python,pandas,dataframe,duplicates,Python,Pandas,Dataframe,Duplicates,我有一个类似于下面的数据框: 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 = le
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
您可以将此功能用于:
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
你的预期产出是多少?只要使用
df.groupby('Time',as_index=False).mean()
?@Zero我添加了预期的输出。谢谢你的评论;您是否可以解释groupby正在做什么,我是否可以有效地为大型数据集实现它?请参阅文档:我不知道原因是什么,但它对我不起作用尝试此操作时,您会得到什么样的输出/错误?
B C
Time
10:06 2.0 5.000000
10:07 4.5 2.000000
10:08 7.0 4.333333