我有一个数据框,我想用 MaxP 中的值替换 MinP 中的值,前提是 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) 但没有得到任何地方。
还有其他想法吗?
最佳答案
你可以使用 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
以避免模式被解释为正则表达式。
关于如果另一列包含特定字符串,Python Pandas 如何更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417322/