我有一个数据框,仅在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) 但什么都没得到。
还有其他想法吗?
答案 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.1
或2e10
,您可以使用'^\+/-(.+)'
答案 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
以避免将模式解释为正则表达式。