如何修改数据框,以便在PythonPandas中的列中的其他字符之间取值?

23c0lvtd  于 2023-01-24  发布在  Python
关注(0)|答案(2)|浏览(126)

我在Python Pandas中有DataFrame,如下所示:

COL_1 | COL_2               | COL_3
------|---------------------|---------
111   | CV_COUNT_ABC_XM_BF  | CV_SUM_ABC_XM_BF
222   | CV_COUNT_DEF_XM_BF  | CV_SUM_CC_XM_BF
333   | CV_COUNT_CC_XM_BF   | LACK
444   | LACK                | CV_SUM_DEF_XM_BF
...   | ...                 |  ...

我需要修改上面的DataFrame,使COL_2和COL_3中的值为:

  • 如果COL_2或COL_3中存在“LACK”,则将其保留
  • 如果存在“LACK”以外其他值,则取值:
between "CV_COUNNT_" and "_XM_BF" 

or 

between "CV_SUM_" and "_XM_BF"

因此,作为一个结果,我需要像下面这样的东西:

COL_1 | COL_2             | COL_3
------|-------------------|---------
111   | ABC               | ABC
222   | DEF               | CC
333   | CC                | LACK
444   | LACK              | DEF
...   | ...               | ...
nsc4cvqm

nsc4cvqm1#

我们可以在这里使用np.where沿着str.extract

df["COL_2"] = np.where(df["COL_2"] == 'LACK', df["COL_2"],
                       df["COL_2"].str.extract(r'CV_COUNT_(\w+?)_XM_BF'))
df["COL_3"] = np.where(df["COL_3"] == 'LACK', df["COL_3"],
                   df["COL_3"].str.extract(r'CV_SUM_(\w+?)_XM_BF'))
ctehm74n

ctehm74n2#

您可以使用replace

df = df.replace({'COL_2': {'CV_COUNT_(\w+)_XM_BF': r'\1'},
                 'COL_3': {'CV_SUM_(\w+)_XM_BF': r'\1'}}, regex=True)
print(df)

# Output
   COL_1 COL_2 COL_3
0    111   ABC   ABC
1    222   DEF    CC
2    333    CC  LACK
3    444  LACK   DEF

最短版本:df.replace({'CV_(?:COUNT|SUM)_(\w+)_XM_BF': r'\1'}, regex=True)

相关问题