熊猫groupby并将不同的列加在一起

时间:2020-06-23 09:49:15

标签: python pandas

我有一个名为sum_2的数据框。

我希望能够取(total_tom + total_Tomato_CalR + total_CalR的均值,而忽略NaN值并按TimeType_of_mouse分组,和Mouse_number都同时使用,因为我不希望彼此添加不同的TimeType_of_mouseMouse_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       

3 个答案:

答案 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)