大熊猫意味着某些专栏

时间:2016-09-04 14:00:56

标签: python pandas numpy

我有一个像这样的pandas数据框:

enter image description here

如果Cluster == 1或CLuster == 2,我怎样才能计算特定列的平均值(最小值/最大值,中值)?

谢谢!

4 个答案:

答案 0 :(得分:2)

您可以使用以下方法创建仅包含相关行的新df:

newdf = df[df['cluster'].isin([1,2)]

newdf.mean(axis=1)

为了计算特定列的平均值,您可以:

newdf["page"].mean(axis=1) 

答案 1 :(得分:1)

如果您的意思是仅在Cluster为1或2的情况下取平均值,那么此处的其他答案将解决您的问题。如果您的意思是对Cluster的每个值采用单独的均值,您可以使用pandas的聚合函数,包括groupybyagg

df.groupby("Cluster").mean()

是最简单的,将采用按群集分组的所有列的方法。

df.groupby("Cluster").agg({"duration" : np.mean}) 

是一个示例,其中您只取一个特定列的平均值,按群集分组。您还可以使用np.minnp.maxnp.median

groupby方法生成一个GroupBy对象,类似于DataFrame,但不像DataFrame。可以将其视为GroupBy分组,等待应用聚合。 mean()对象具有简单的内置聚合函数,适用于所有列(第一个示例中为agg()),还有一个更通用的聚合函数(第二个示例中为dict )您可以使用以各种方式应用特定功能。使用它的一种方法是传递一个{{1}}列名称的函数,因此可以将特定函数应用于特定列。

答案 2 :(得分:0)

简单直观的答案

首先选择感兴趣的行,然后平均然后选择感兴趣的列。

clusters_of_interest = [1, 2]
columns_of_interest = ['page']

# rows of interest
newdf = df[ df.CLUSTER.isin(clusters_of_interest) ]
# average and pick columns of interest
newdf.mean(axis=0)[ columns_of_interest ] 

更高级

# Create groups object according to the value in the 'cluster' column
grp = df.groupby('CLUSTER')
# apply functions of interest to all cluster groupings
data_agg = grp.agg( ['mean' , 'max' , 'min' ] )

这也是一个很好的link,它描述了聚合技术。应该注意的是,简单的回答"群集1和2上的平均值或clusters_of_interest中指定的平均值,而.agg函数对具有相同CLUSTER值的每组值进行平均。

答案 3 :(得分:0)

您可以使用boolean indexing在一行中执行此操作。例如,您可以执行以下操作:

import numpy as np
import pandas as pd

# This will just produce an example DataFrame
df = pd.DataFrame({'a':np.arange(30), 'Cluster':np.ones(30,dtype=np.int)})
df.loc[10:19, "Cluster"] *= 2
df.loc[20:,   "Cluster"] *= 3

# This line is all you need
df.loc[(df['Cluster']==1)|(df['Cluster']==2), 'a'].mean()

对于正确的集群,布尔索引数组为Truea只是计算平均值的列的名称。