簡體   English   中英

如何根據 pandas 中的條件用另外兩列的值替換部分列值

[英]How to replace a part of column value with values from another two columns based on a condition in pandas

我有一個 dataframe df ,如下所示。 我想替換所有具有_temp_id列值(下划線與另一個值,該值是 temp_id + city+ country 列值的數字部分的組合。

去向

    temp_id          city    country
    12225IND         DELHI    IND
    14445UX_TY       AUSTIN   US
    56784SIN         BEDOK    SIN
    72312SD_IT_UZ    NEW YORK US
    47853DUB         DUBAI    UAE
    80976UT_IS_SZ    SYDENY   AUS
    89012TY_JP_IS    TOKOYO   JPN
    51309HJ_IS_IS
    42087IND          MUMBAI  IND 

預計 Output

temp_id          city    country
12225IND         DELHI    IND
14445AUSTINUS    AUSTIN   US
56784SIN         BEDOK    SIN
72312NEWYORKUS   NEW YORK US
47853DUB         DUBAI    UAE
80976SYDENYAUS   SYDENY   AUS
89012TOKOYOJPN   TOKOYO   JPN
51309HJ_IS_IS
42087IND          MUMBAI  IND 

這怎么能在pandas python

使用boolean 索引

# find rows with value in country and city
m1 = df[['city', 'country']].notna().all(axis=1)
# find rows with a "_"
m2 = df['temp_id'].str.contains('_')

# both conditions above
m = m1&m2

# replace matching rows by number + city + country
df.loc[m, 'temp_id'] = (df.loc[m, 'temp_id'].str.extract('^(\d+)', expand=False)
                        +df.loc[m, 'city'].str.replace(' ', '')+df.loc[m, 'country']
                       )

Output:

          temp_id      city country
0        12225IND     DELHI     IND
1   14445AUSTINUS    AUSTIN      US
2        56784SIN     BEDOK     SIN
3  72312NEWYORKUS  NEW YORK      US
4        47853DUB     DUBAI     UAE
5  80976SYDENYAUS    SYDENY     AUS
6  89012TOKOYOJPN    TOKOYO     JPN
7   51309HJ_IS_IS      None    None
8        42087IND    MUMBAI     IND

您可以在temp_id列上使用 str.replace str.replace()方法,並使用正則表達式來匹配要替換的值的模式。 這是一個例子:

import re

df['temp_id'] = df['temp_id'].apply(lambda x: re.sub(r'^(\d+)_.*', r'\1'+df['city']+df['country'], x))

這使用正則表達式來匹配要替換的temp_id值的模式(在這種情況下,任何以一個或多個數字開頭后跟下划線的值),並將它們替換為與值連接的匹配數字相應的城市和國家列。 結果將是具有所需格式的 temp_id 列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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