计算组的平均值,同时保留object类型的列

2024-04-16 14:38:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据帧:

col1   col2 col3 col4   col5...
g1       x1   x2   x3     x4
g1       x5   x6   x7     x8
g2       y1   y2   y3     y4
g2       y5   y6   y7     y8
...

其中col1/col2为“object”类型,col3/col4/col5为“float”类型

我想先按col1分组,然后计算col3/col4/col5的平均值,同时将col2保留在结果数据帧中。我所说的“保持”只是指保持原样,甚至不计算平均值,这是不可能的,因为它属于“对象”类型。每组中每行col2的实际值相同,选择任何人都可以

如果我天真地这样做:

df.groupby(["col1"]).mean().reset_index()

然后,结果数据帧将不保留col2,col2已消失。也就是说,结果如下所示:

col1           col3          col4          col5...
g1        (x2+y2)/2     (x3+y3)/2     (x4+y4)/2
g2        (x6+y6)/2     (x7+x8)/2     (x8+y8)/2

如何在保持col2不变的情况下计算col3/col4/col5的平均值


Tags: 数据类型col2col3col1平均值x2g1
1条回答
网友
1楼 · 发布于 2024-04-16 14:38:28

有很多方法可以选择“col2”的值

  • 生成你想要的平均值
  • 将包连接到要保留的列上,选择第一个列
s = 20
df = pd.DataFrame({"col1":np.random.choice(["g1","g2","g3"],s),
             "col2":np.random.choice(["constant"],s),
             **{f"col{i+3}":np.random.randint(1,10,s) for i in range(3)}})

df.groupby("col1").mean().join(df.groupby(["col1"])["col2"].first() ).reset_index(drop=True)

^{tb1}$

相关问题 更多 >