我有一个名为sum_2
的数据框。
我希望能够取(total_tom
+ total_Tomato_CalR
+ total_CalR
的均值,而忽略NaN值并按Time
,Type_of_mouse
分组,和Mouse_number
都同时使用,因为我不希望彼此添加不同的Time
,Type_of_mouse
和Mouse_number
值。
我理想的输出是(126.0 + 91.0 + 53.0)/ 3 = 90(90是将所有值相加所得的平均值)。
我相信pandas
在使用.sum()
和.mean()
时会自动忽略NaN值(如果我错了,请对此进行纠正)。
In [1]: sum__2
Out[1]:
Time Type_of_mouse Mouse_number total_tom total_Tomato_CalR total_CalR
15w pTam FF 6045 126.0
15w pTam FF 6551 91.0
15w pTam FF 9729 53.0
15w pTam WT 6046 109.0
15w pTam WT 6156 106.0
15w pTam WT 6835 129.0
15w pTam WT 9631 108.0
15w pTam WT A859 238.0
2w pTam FF 6606 70.0
2w pTam FF 6609 78.0
2w pTam FF 6649 178.0
2w pTam FF 9205 87.0
2w pTam FF 9211 133.0
2w pTam WT 6050 118.0
2w pTam WT A1257 138.0
8m pTam FF 8998 165.0
8m pTam FF 9004 106.0
8m pTam FF 9007 91.0
8m pTam FF 9048 100.0
8m pTam WT 9005 184.0
8m pTam WT 9043 173.0
8m pTam WT 9045 163.0
8m pTam WT 9224 187.0
答案 0 :(得分:1)
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
答案 1 :(得分:0)
您可以在groupby之后使用agg()函数。 在传递列名称和您要在键值对ex中执行的函数中:
df1=df.groupby([some columns]).agg({'coulmn_name_to_agg':'sum/mean/count','another_column':'sum/mean/count'})
链接到agg文档。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html
答案 2 :(得分:0)
您可以使用.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)