簡體   English   中英

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

[英]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.12e10 ,您可以使用'^\+/-(.+)'

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM