簡體   English   中英

如何在 pandas 數據幀中按不同范圍對一列值求和

[英]How to sum one column value by a different range in pandas data frame

range      number  Value
3600-3700  1301    5
3700-3800  1301    6
3600-3700  1302    10
3700-3800  1302    12
3800-3900  1301    3
3800-3900  1302    4
3900-4000  1301    5
3900-4000  1302    6

這是我的輸入,我希望我的 output 是,

range      number  Value
3600-3800  1301    11
3600-3800  1302    22
3800-4000  1301    8
3800-4000  1302    10

我想將 value 列與新的范圍值相加。 誰能幫我? 我正在使用 pandas

首先,讓我們添加列rangeminmax ,以便我們更方便地使用它。

df['min_range'] = df['range'].str.split("-").apply(lambda x: min(x))
df['max_range'] = df['range'].str.split("-").apply(lambda x: max(x))

df
    range       number  value   min_range   max_range
0   3600-3700   1301    5   3600    3700
1   3700-3800   1301    6   3700    3800
2   3600-3700   1302    10  3600    3700
3   3700-3800   1302    12  3700    3800

然后,我們應該有一個針對不同列的具有不同聚合函數的groupby ,我們這樣做如下:

df_final = df.groupby('number').agg({
            'min_range': 'min', 
            'max_range': 'max',
            'value': 'sum'
            })
df_final
    min_range   max_range   value
number          
1301    3600    3800    11
1302    3600    3800    22

如果您想組合min_rangemax_range以僅將一列作為range ,您可以執行以下操作:

df_final['range'] = df_final['min_range'].astype(str) + "-" + df_final['max_range'].astype(str)
df_final.drop(columns=['min_range', 'max_range'], inplace=True)
df_final

        value   range
number      
1301    11  3600-3800
1302    22  3600-3800

  df=pd.read_csv('ranges.csv',dtype= {'range':'string','number':'string','value':np.int32})
  print(df.columns)
  #df['min'],df['max'],*rest=df['range'].str.split('-')

  key=0
  for x,y in df['range'].str.split('-'):
       df.loc[key,'min']=x
       df.loc[key,'max']=y
       key+=1

   print(df.groupby(['number','min','max'])['value'].sum())

 output:
 number  min   max 
 1301    3600  3700     5
         3700  3800     6
         3800  3900     3
         3900  4000     5
  1302   3600  3700    10
         3700  3800    12
         3800  3900     4
         3900  4000     6

暫無
暫無

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

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