[英]Python Pandas how to update a column if another column contains a certain string
我有一个 dataframe 并且我想将 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) 但没有哪儿也去不了。
还有其他想法吗?
+
是正则表达式中的特殊字符,因此您需要执行contains('\+/-')
。 此外, fillna
也很方便:
df['MinP'] = df.MaxP.str.extract('^\+/-(\d+)')[0].fillna(df.MinP)
Output:
MinP MaxP
0 0 20
1 15
2 -10 12
3 20 +/-20
注意: '^\+/-(\d+)'
只提取数字。 如果您的数据包含其他字符,例如20.1
或2e10
,您可以使用'^\+/-(.+)'
您可以使用str.contains + numpy.where :
df['MinP'] = np.where(df.MaxP.str.contains('+/-', regex=False), df.MaxP, df.MinP)
print(df)
Output
MinP MaxP
0 0 20
1 15
2 -10 12
3 +/-20 +/-20
请注意,您必须使用regex=False
以避免将模式解释为正则表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.