2016-05-16 160 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) 

希望這個作品!讓我知道。