Python 一列的平均值基于另一列的值

Python 一列的平均值基于另一列的值,python,dataframe,for-loop,Python,Dataframe,For Loop,我有一个dataframe,其中一列中有许多重复的值。我想创建另一个数据帧,该数据帧只有该值的一个实例与来自原始数据帧的另一列的匹配值的平均值配对。 例如: 我想计算与相同A列值匹配的B列值的平均值。然后创建一个新的数据帧,如下所示: A B 0 1 2.7 1 2 4 2 3 4.3 我这样做是通过循环: df2 = pdDataFrame(columns = ['A','B']) uni = df.A.unique() for x in uni: av = df.

我有一个dataframe,其中一列中有许多重复的值。我想创建另一个数据帧,该数据帧只有该值的一个实例与来自原始数据帧的另一列的匹配值的平均值配对。 例如:

我想计算与相同A列值匹配的B列值的平均值。然后创建一个新的数据帧,如下所示:

  A  B
0  1  2.7
1  2  4
2  3  4.3
我这样做是通过循环:

df2 = pdDataFrame(columns = ['A','B'])
uni = df.A.unique()
for x in uni:
    av = df.loc[(df['A'] == x, 'B')].mean()
    df2 = df2.append(pd.DataFrame([[x, av]], columns = ['A', 'B']))
我知道在数据帧中循环不是一种好的形式,这个过程花了很长时间。它还导致了一个没有索引的数据帧(它们都是0)。哪种方法更合适、更有效。提前谢谢你

简单地说:

df.groupby('A')[['B']].mean().reset_index()
    A      B
0   1   2.666667
1   2   4.000000
2   3   4.333333
如果希望
B
四舍五入:

df.groupby('A')[['B']].mean().round(1).reset_index()
    A    B
0   1   2.7
1   2   4.0
2   3   4.3
或者,即使这样,也不使用
A
作为索引,参数
作为\u index=False

df.groupby('A', as_index=False)[['B']].mean().round(1)
    A    B
0   1   2.7
1   2   4.0
2   3   4.3

您可以按列
“A”
对表格进行分组,并计算每个分组的平均值:

df.groupby("A").mean()

结果是:

df.groupby("A").mean()
      B
A     
1     2.666667
2     4.000000
3     4.333333