簡體   English   中英

如何在Python中求和兩個數組?

[英]How to sum two arrays in Python?

我做了一個這樣的DataFrame:

import numpy as np
import pandas as pd 

occurrence = np.array([4, 5, 4, 0, 1, 4, 3])
year = np.array([1851,1852,1853,1854,1855,1856,1857])
disaster = {"occur":pd.Series(occur),"year":pd.Series(year)}
df =  pd.DataFrame(disaster)

現在我想做一個函數,這樣,當我給兩年時,它會給我這兩年出現的總和。 如果我把18511852 ,它會告訴我發生的是9

我寫了這樣的函數,但它顯示錯誤:

def dist(s1,s2):
    return (sum (year>=s1 and year< s2))

print dist(s1,s2)
print(df.loc[df['year'].isin((1851,1852))]["occur"].sum())

要么:

 print(df.loc[df.year.isin((1851,1852))].occur.sum())

對於一系列日期,創建范圍列表似乎比使用&更有效:

df.loc[df.year.isin(range(s1, s2+1))].occur.sum()

如果你只是想要一個numpy方法,你會做類似的事情:

import numpy as np

occurrence= np.array([4, 5, 4, 0, 1, 4, 3])
year = np.array([1851,1852,1853,1854,1855,1856,1857])

year1, year2 = 1851, 1852
mask = (year == year1) | (year == year2)
print occurrence[mask].sum()

請注意,如果你想要這兩年之間所有出現的總和,你會做更多的事情:

mask = (year >= year1) & (year <= year2)

使用pandas ,同樣的方法仍然有效,但正如其他人已經指出的那樣,如果你只對這兩年感興趣(而不是它們之間的間隔),那么使用isin方法構建布爾掩碼有更有效的方法。

你需要使用&而不是and 這意味着你的功能應該是:

def dist(s1, s2):
    return df.occur[(df.year >= s1) & (df.year <= s2)].sum()

然后你有:

In [72]: dist(1851, 1852)
Out[72]: 9

1851 <= df.yeardf.year <= 1852創建了一個布爾系列。 Python and不能像我們想的那樣使用這些對象 - 它實質上在每個系列上調用bool ,這會導致錯誤。 在另一方面, &將進行逐元素,並返回True當這兩個系列是True

您可能還會發現isin()對於給定日期列表的值求和非常有用。 例如:

>>> df.occur[df.year.isin([1851, 1852])].sum()
9
In [21]: import numpy as np

In [22]: import pandas as pd

In [23]: occurrence= np.array([4, 5, 4, 0, 1, 4, 3])

In [24]: year = np.array([1851,1852,1853,1854,1855,1856,1857])

In [25]: my_func = lambda *l: sum([x[0] for x in zip(occurrence, year) if x[1] in l])

In [26]: my_func(1851, 1852)
Out[26]: 9

In [27]: 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM