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

How to remove the last part of each entry in a column based on a pattern?

我在 pandas 数据框中编译了一组油井。它看起来像这样:

wells = pd.DataFrame({'date':['2019-01-01', '2019-01-01','2019-01-01', '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

我想要实现的是创建一个新变量(即 'Field')来编译每个字段的聚合输出。为此,我需要去掉每口井名称的最后一部分;但我似乎无法使用 Python 和 Pandas.

找到解决方案

我想去 table 看起来像这样:

wells_agg = pd.DataFrame({'date':['2019-01-01', '2019-01-01','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(wells.well.str.split('-').str[0])) 而不是 wells.groupby('well')。考虑到这一点,请参阅下面的解决方案。

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