如果在Pandas Dataframe 中达到阈值,如何计算面积总和?

xytpbqjk  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(102)

我有一个Pandas数据框df,我试图找到在其他Pandas数据框lst中的阈值日之前每个州需要收获的公顷数area

lst = pd.DataFrame()
lst['ST'] = ['CA', 'MA', 'TX', 'FL', 'OH', 'WY', 'AK']
lst['doy'] = [140, 150, 160, 170, 180, 190, 200]
print(df)
            doy  ST  ...          area  left
0           111  AK  ...  4.293174e+05  760964.996900
1           120  AK  ...  4.722491e+06  760535.679500
2           121  AK  ...  8.586347e+06  760149.293900
3           122  AK  ...  2.683233e+07  758324.695200
4           122  AK  ...  2.962290e+07  758045.638900
..          ... ...  ...           ...            ...
111         211  AK  ...  7.609006e+09     107.329336
112         212  AK  ...  7.609221e+09      85.863469
113         213  AK  ...  7.609435e+09      64.397602
114         214  AK  ...  7.609650e+09      42.931735
115         215  AK  ...  7.610079e+09       0.000000

因此,我最终会得到一个 Dataframe ,其中包含lst中阈值doy之前的所有area

area       ST
   5.0000+05      CA
   4.0123+05      MA
   3.1941+05      TX
   4.0011+05      FL
   1.2346+05      OH
   87.318+05      WY
   0.7133+05      AK

我怎样才能做到这一点?

33qvvth1

33qvvth11#

您可以通过lst中的SeriesMapST列,并比较是否不像df['doy']列,在boolean indexing中过滤并聚合sum

df1 = (df[df['doy'].lt(df['ST'].map(lst.set_index('ST')['doy']))]
        .groupby('ST', as_index=False)['area'].sum()[['area','ST']])
print (df1)
         area  ST
0  70193385.4  AK
s4chpxco

s4chpxco2#

如果我没理解错的话,你应该用doy过滤df,用ST和sum过滤group。
下面是一个doy在108之前的例子:

doy_threshold = 108
df[df['doy']<doy_threshold].groupby(by=["ST"]).sum()

相关问题