【问题标题】:Python Pandas how to update a column if another column contains a certain string如果另一列包含某个字符串,Python Pandas如何更新列
【发布时间】:2019-10-16 15:54:36
【问题描述】:

我有一个数据框,我想将 MinP 中的值替换为 MaxP 中的值,前提是 MaxP 具有 +/- [然后我将删除 +/- 并转换为数字]

我的代码可以工作,但是当 Maxp 没有 +/- 时,它会在 MinP 中放置一个 0,而我想保留 MinP 的值(如果有)

import pandas as pd 
df = pd.DataFrame({
    'MinP':['0','','-10','',],
    'MaxP':['20','15','12','+/-20']})

print(df)

df['MinP'] = df['MaxP'].apply(lambda x: df['MaxP'] if '+/-' in x else df['MinP'])
print(df)

    MinP   MaxP
0    0     20
1          15
2  -10     12
3       +/-20
    MinP   MaxP
0    0     20
1    0     15
2    0     12
3   20  +/-20

我还玩过: df.loc[df['MinP']] = np.where(df.MaxP.str.contains("+/-"), df['MaxP'],df.MinP) 但没有得到任何地方。

还有其他想法吗?

【问题讨论】:

    标签: python pandas dataframe lambda


    【解决方案1】:

    + 是正则表达式中的一个特殊字符,所以你需要做contains('\+/-')。另外,fillna 也很方便:

    df['MinP'] = df.MaxP.str.extract('^\+/-(\d+)')[0].fillna(df.MinP)
    

    输出:

     MinP   MaxP
    0    0     20
    1          15
    2  -10     12
    3   20  +/-20
    

    注意'^\+/-(\d+)' 只提取数字。如果您的数据包含其他字符,例如20.12e10,可以使用'^\+/-(.+)'

    【讨论】:

      【解决方案2】:

      你可以使用str.contains + numpy.where:

      df['MinP'] = np.where(df.MaxP.str.contains('+/-', regex=False), df.MaxP, df.MinP)
      print(df)
      

      输出

          MinP   MaxP
      0      0     20
      1            15
      2    -10     12
      3  +/-20  +/-20
      

      请注意,您必须使用 regex=False 以避免将模式解释为正则表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-11
        • 2022-11-23
        • 2017-08-20
        • 1970-01-01
        • 2020-05-22
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        相关资源
        最近更新 更多