我有一个数据框,其中的一列在一个列中具有许多重复的值。我想创建另一个数据框,该数据框只有该值的一个实例与来自原始数据框的另一列的匹配值的平均值配对。例子:
data = [[1,1],[1,2],[2,2],[3,3],[3,1],[2,3],[1,5],[2,7],[3,9]]
df = pd.DataFrame(data, columns = ['A', 'B'])
A B
0 1 1
1 1 2
2 2 2
3 3 3
4 3 1
5 2 3
6 1 5
7 2 7
8 3 9
我想对与相同的列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']))
我知道循环遍历DataFrame并不是一种好方法,并且这个过程花了很长时间。这也导致DataFrame没有索引(它们全为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
带有参数的索引as_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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句