【发布时间】:2021-05-23 01:58:40
【问题描述】:
我有一个如下的数据框:
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”类型
我想先 groupby 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 的平均值?
【问题讨论】:
-
你怎么能“保留”
col2?每一行都有不同的值,你会选择哪一个? -
如果你想保留
col2df.assign(**df.groupby("col1")['col3','col4','col5'].transform('mean'))的所有行,你可能需要转换 -
@Nick,“保持”我的意思是只保留每一行的值,不做任何修改
-
您的原始数据框有多行
g1、g2等,但输出只有 1。那么您如何确定输出行中的值是什么? -
如果
col2对于每个col1值都相同,您也可以按其分组
标签: python pandas pandas-groupby