Python 数据帧中的特定列的平均值和模式

Python 数据帧中的特定列的平均值和模式,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大的数据框,沿着下面的一行,我希望计算特定列的平均值或模式。我希望通过一个功能(无论是打开还是关闭)和一个ID列(1或2)来分组 我可以分别完成这两项任务,以找到特定列的平均值和模式,但我不知道如何将两个输出连接在一起,但我还想知道是否有一种方法可以在一次点击中计算所选列的平均值或模式 在我目前的方法中,虽然我能够分别完成这两项任务,但我很难将这两项输出连接在一起 这是我的单独方法 #as mode is not an official function in Pandas, set o

我有一个大的数据框,沿着下面的一行,我希望计算特定列的平均值或模式。我希望通过一个功能(无论是打开还是关闭)和一个ID列(1或2)来分组

我可以分别完成这两项任务,以找到特定列的平均值和模式,但我不知道如何将两个输出连接在一起,但我还想知道是否有一种方法可以在一次点击中计算所选列的平均值或模式

在我目前的方法中,虽然我能够分别完成这两项任务,但我很难将这两项输出连接在一起

这是我的单独方法

#as mode is not an official function in Pandas, set out method here
from scipy.stats.mstats import mode
f = lambda x: mode(x, axis=None)[0]

means = MY_DF.groupby(['Feature','ID'])[ITEM1,ITEM3].mean()
moder = MY_DF.groupby(['Feature','ID'])[ITEM2].apply(f)
我的平均方法输出如下:

        ITEM1   ITEM3
ON  1   1.93    37.8
    2   8.32    15.5
OFF 1   2.55    23.4
    2   3.55    32.4
        ITEM2   
ON  1   [544]   
    2   [674]   
OFF 1   [544]
    2   [674]   
我的mode方法输出如下内容:

        ITEM1   ITEM3
ON  1   1.93    37.8
    2   8.32    15.5
OFF 1   2.55    23.4
    2   3.55    32.4
        ITEM2   
ON  1   [544]   
    2   [674]   
OFF 1   [544]
    2   [674]   
我在寻找一个最终的输出像这样的东西,如果可能的话

        ITEM1   ITEM3   ITEM2
ON  1   1.93    37.8    544
    2   8.32    15.5    674 
OFF 1   2.55    23.4    544
    2   3.55    32.4    674
你可以。键引用数据帧的列,值指定聚合函数。比如说,

import pandas as pd
import scipy.stats.mstats as mstats
def mode(x):
    return mstats.mode(x, axis=None)[0]

df = pd.DataFrame({'Feature': ['ON', 'OFF', 'ON', 'ON', 'OFF'],
                   'ID': [1, 1, 2, 1, 2],
                   'ITEM1': [2.3, 2.55, 8.32, 1.56, 3.55],
                   'ITEM2': [544, 544, 674, 544, 674],
                   'ITEM3': [32.2, 23.4, 15.5, 43.4, 32.4],})

df.groupby(['Feature','ID']).agg({'ITEM1':'mean','ITEM3':'mean','ITEM2':mode})
print(df)
屈服

  Feature  ID  ITEM1  ITEM2  ITEM3
0      ON   1   2.30    544   32.2
1     OFF   1   2.55    544   23.4
2      ON   2   8.32    674   15.5
3      ON   1   1.56    544   43.4
4     OFF   2   3.55    674   32.4

太棒了,谢谢你,这很好用。我的另一个问题是如何确保输出中的任何平均值都限制在小数点后2位?您可以使用
pd.options.display.float_format='{.2f}'。format
控制打印数据帧时如何显示浮动。如果只需要控制某些列的显示,请参见