2016-05-16 163 views
1

我想运算与给定的数据框这个平均值的直方图仓:计算平均值从熊猫直方图数据框中

 class   Area 
0  1-10 1.675883e+06 
1  11-20 1.026733e+06 
2  21-30 6.102651e+05 
3  31-40 6.281576e+05 
4  41-50 4.710967e+05 
5  51-60 4.236068e+05 
6  61-70 4.015372e+05 
7  71-80 3.619052e+05 
8  81-90 3.386376e+05 
9  91-100 3.333406e+05 
10 101-110 2.423542e+05 
11 111-120 2.388251e+05 
12 121-130 1.440134e+05 
13 131-140 1.849219e+05 
14 141-150 5.982432e+06 

所以,答案应该是哪个类对应于平均值。平均值基于每个班级的面积。不知道如何继续这个。

答案将是对应于平均值的类别的名称,例如, 31 - 40

+0

如果11-20更接近平均值(或者是一个任意的例子),那么答案是31-40?你有额外的限制,该类应该是相应的,但小于平均值? – TNT

+0

谢谢@TNT,答案是任意的,因为我不知道它。 – user308827

+0

如果这就是你要找的东西,这对我来说很好,但不要随意使用它们,因为它们做的不同。请注意Stefan的解决方案会给你插入点(最后一个值低于平均值);独立于较低或较高类别是否接近绝对数量的平均值;而我的解决方案为您提供了与偏差方向无关的平均值最接近的偏差。 – TNT

回答

1

类您可以使用.searchsorted()得到插入位置。这有点奇怪,但分配确实如前所述bimodal,这依赖于排序数据。

df = df.sort_values('Area').reset_index(drop=True) 
df.loc[df.Area.searchsorted(df.Area.mean()) - 1] 

    class  Area 
11 31-40 628157.6 
1

如果这是一个直方图,它不是单峰。你确定你想要面积值的平均值吗?

要看到这个问题,你可以绘制它:

import matplotlib.pyplot as plt 
df.plot(x='class',y='area') 
plt.axhline(df['area'].mean(),color='r') 
df['area'].plot(kind='bar') 

你可以选择几种不同类的较开。 如果您正在寻找与区域平均值最接近的类别(但请确保您知道数据方式的含义):

首先计算每个类别的平均值的绝对距离,然后选择具有相同指数的最小距离:

df['dist']=abs(df['area']-df['area'].mean()) 
df['class'][df['dist'].idxmin()] # not considering multiple minima 
df['class'][df['dist']==df['dist'].min()] #considering multiple minima 

在阴谋策划酒吧红见here ..

0

首先读取数据帧为(df)。那么你可能会发现该地区的平均值为:

import pandas as pd 
import numpy as np 

df = df.sort_values(['Area']) #<-- sort the dataframe depending on area value 
mu = df['Area'].mean() 


for i,j in df.iterrows(): 
if j['Area'] < mu: 
cl = j['class'] 


print('mean lies in class') 
print(cl) 

希望这个作品!让我知道。