Python Pandas groupby并将不同的列求和在一起
我把这个数据框称为Python Pandas groupby并将不同的列求和在一起,python,pandas,Python,Pandas,我把这个数据框称为sum_2 我希望能够同时取(total\u tom+total\u tomo\u CalR+total\u CalR)的平均值,同时忽略NaN值,并按Time、Type\u鼠标和鼠标进行分组,因为我不想要不同的时间s、Type\u鼠标,和鼠标编号值相互相加 理想情况下,我想要的输出是(126.0+91.0+53.0)/3=90(90是所有值相加的平均值) 我相信pandas在使用.sum()和.mean()时会自动忽略NaN值(如果我错了,请纠正我) 您可以在groupby之
sum_2
我希望能够同时取(total\u tom
+total\u tomo\u CalR
+total\u CalR
)的平均值,同时忽略NaN值,并按Time
、Type\u鼠标
和鼠标
进行分组,因为我不想要不同的时间
s、Type\u鼠标
,和鼠标编号
值相互相加
理想情况下,我想要的输出是(126.0+91.0+53.0)/3=90(90是所有值相加的平均值)
我相信pandas
在使用.sum()
和.mean()
时会自动忽略NaN值(如果我错了,请纠正我)
您可以在groupby之后使用agg()函数。
In-pass列名和要在键值对ex中执行的函数:
df1=df.groupby([some columns]).agg({'coulmn_name_to_agg':'sum/mean/count','another_column':'sum/mean/count'})
链接到agg文档
您可以使用
.groupby
和.transform
将要添加的列添加到一起
sum_2['new_col'] = sum_2.groupby(['Time','Type_of_mouse', 'Mouse_number'])['total_tom'].transform(mean) + sum_2.groupby(['Time','Type_of_mouse', 'Mouse_number'])['total_Tomato_CalR'].transform(mean) + sum_2.groupby(['Time','Type_of_mouse', 'Mouse_number'])['total_CalR'].transform(mean)
这也可能是一个更简洁的版本:
gb = sum_2.groupby(['Time','Type_of_mouse', 'Mouse_number'])
sum_2['new_col'] = gb.total_tom.transform(mean) + gb.total_Tomato_CalR.transform(mean) + gb.total_CalR.transform(mean)
IIUC,你需要:
grp = sum_df.groupby(['Time', 'Type_of_mouse'])
grp.sum().sum(axis=1) / grp.count().sum(axis=1)
输出:
Time Type_of_mouse
15w pTam FF 90.00
WT 138.00
2w pTam FF 109.20
WT 128.00
8m pTam FF 115.50
WT 176.75
dtype: float64
请不要张贴图片。看一看。也许我的措辞令人困惑或完全错误,但我已将我的问题编辑为包括(126.0+91.0+53.0)/3,即括号中的“total_tom”、“total_Tomo_CalR”和“total_CalR”的值。我之所以添加此评论,是因为我认为您理解我的问题是说我想要这些列的平均值。您能否以可复制和粘贴的格式提供上述示例数据?请看这里:刚刚发布。让我知道我是否应该提供更多的例子或信息。非常感谢!这就是我需要的。
Time Type_of_mouse
15w pTam FF 90.00
WT 138.00
2w pTam FF 109.20
WT 128.00
8m pTam FF 115.50
WT 176.75
dtype: float64