2015-02-05 33 views
0
import numpy as np 
import pandas as pd 

year=np.array([1851.203,1851.632,1851.969,1851.975,1852.314,1852.347,1852.358,1852.385,1852.977,1853.196,1853.229,1853.319,1853.5,1854.135,1856.396,1856.506,1856.539,1856.618,1857.138,1857.404]) 
coal=pd.DataFrame(year) 

def disaster(year1,year2): 
    disaster = (coal >= year1) & (coal <= year2) 
    print year.sum() 

disaster(1852,1856) 
>>>360806.155 

我想寫一個函數,它會給我兩年之間的年數。就像我把1852,1856年放在一起,但是我想要在這個時間間隔之間有多少行(整數)。如何計算python中的數據框中的行?

例如,1851是四次,1852是5次,當我把時間間隔(1851,1852)它總結併發布爲9.我想要任何兩年。

任何人都可以幫忙嗎?

+0

使用'範圍(YEAR1,YEAR2)'讓所有事情都處於中間。還要結合它的長度來知道你有多少年。不要忘記範圍內的包容性和獨特的元素。 – ha9u63ar 2015-02-05 15:39:38

+0

對不起。我不明白。在哪裏放置範圍? – Benzamin 2015-02-05 15:43:31

+0

對不起,你問的行數或年數?例如在你的例子中會有10行,但在1852年和1856年之間有3年 – EdChum 2015-02-05 15:46:43

回答

0
def disaster(year1,year2): 
    return np.sum((coal >= year1) & (coal <= year2+1)) 

print disaster(1851,1852) 

>>> 
0 9 
dtype: int64 
0

我已經根據一些假設修改了你的代碼。我認爲你想要做的就是用你的面具來掩飾原來的df,打印或獲得總和,並獲得長度。爲了讓您需要使用面膜與原來的DF,呼叫dropna()NaN行,然後調用len對得到的DF長度:

In [16]: 

year=np.array([1851.203,1851.632,1851.969,1851.975,1852.314,1852.347,1852.358,1852.385,1852.977,1853.196,1853.229,1853.319,1853.5,1854.135,1856.396,1856.506,1856.539,1856.618,1857.138,1857.404]) 
coal=pd.DataFrame(year) 

def disaster(year1,year2): 
    total = (coal >= year1) & (coal <= year2) 
    print (coal[total].sum()) 
    print(len(coal[total].dropna())) 

disaster(1852,1856) 
0 18529.76 
dtype: float64 
10 
+0

@ EdChum-我修改了我的問題。我想看兩年之間的行數。例如,1851年是四次,1852年是5次,當我把時間間隔(1851,1852)歸納起來並放出爲9.我想要這個感謝 – Benzamin 2015-02-05 16:07:55

+0

@AlfradNobel您的條件不反映這一點,您在1851年和1852年之間恰好有4行,您引用的額外行數大於1852年且小於1853年,您可以在year2中添加1,如下所示: '總= =(煤=>年1)&(煤<=年2 + 1)' – EdChum 2015-02-05 16:11:33

+0

@ EdChum-我明白了,非常感謝。 – Benzamin 2015-02-05 16:15:27

相關問題