如果另一列包含特定字符串,Python Pandas如何更新列

时间:2019-10-16 15:54:36

标签: python pandas dataframe lambda

我有一个数据框,仅在MaxP具有+/-的情况下,才想用MaxP中的值替换MinP中的值 [然后我将删除+/-并转换为数字]

我的代码可以正常工作,但是当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) 但什么都没得到。

还有其他想法吗?

2 个答案:

答案 0 :(得分:2)

+是正则表达式中的特殊字符,因此您需要执行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,您可以使用'^\+/-(.+)'

答案 1 :(得分:1)

您可以使用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以避免将模式解释为正则表达式。