答案 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的聚合函数,包括groupyby
和agg
:
df.groupby("Cluster").mean()
是最简单的,将采用按群集分组的所有列的方法。
df.groupby("Cluster").agg({"duration" : np.mean})
是一个示例,其中您只取一个特定列的平均值,按群集分组。您还可以使用np.min
,np.max
,np.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()
对于正确的集群,布尔索引数组为True
。 a
只是计算平均值的列的名称。