如何根据模式删除列中每个条目的最后一部分?

问题描述

我用熊猫数据框编译了一组油井。看起来像这样:

wells = pd.DataFrame({'date':['2019-01-01','2019-01-01','2019-01-01'],'well': ['FIELDX-1D','FIELDX-2D','FIELDY-1C','FIELDY-1B','FIELDZ-1A','FIELDZ-1J'],'oil_mmbd':[3.1,5.6,9.8,2.5,4.7,6.1]})

         date       well  oil_mmbd
0  2019-01-01  FIELDX-1D       3.1
1  2019-01-01  FIELDX-2D       5.6
2  2019-01-01  FIELDY-1C       9.8
3  2019-01-01  FIELDY-1B       2.5
4  2019-01-01  FIELDZ-1A       4.7
5  2019-01-01  FIELDZ-1J       6.1

我要实现的目标是创建一个新变量(即“字段”),以编译每个字段的汇总输出。为此,我需要删除每口井名称的最后一部分。但我似乎无法使用Python和Pandas找到解决方案。

我想进入一个像这样的表:

wells_agg = pd.DataFrame({'date':['2019-01-01','field': ['FIELDX','FIELDY','FIELDZ'],'oil_mmbd':[8.7,12.3,10.8]})

         date   field  oil_mmbd
0  2019-01-01  FIELDX       8.7
1  2019-01-01  FIELDY      12.3
2  2019-01-01  FIELDZ      10.8

解决方法

您可以使用wells.well.str.split('-').str[0])去除阱列的后缀。因此,请使用wells.groupby('well')而不是wells.groupby(wells.well.str.split('-').str[0]))。请注意以下解决方案。

wells.groupby(['date',wells.well.str.split('-')\
                     .str[0]]).oil_mmbd.sum().reset_index()



     date    well  oil_mmbd
0  2019-01-01  FIELDX       8.7
1  2019-01-01  FIELDY      12.3
2  2019-01-01  FIELDZ      10.8