第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

根據(jù)條件填充數(shù)據(jù)框行的值

根據(jù)條件填充數(shù)據(jù)框行的值

翻翻過去那場雪 2023-03-08 14:49:42
背景我有一個(gè)如下所示的數(shù)據(jù)集:product_name    priceWomen's pant    20.00Men's Shirt     30.00Women's Dress   40.00Blue Shirt      30.00...我希望創(chuàng)建一個(gè)名為性別它將包含基于 product_name 中的字符串的值 Women、Men 或 Unisex期望的結(jié)果如下所示:product_name    price   genderWomen's pant    20.00   womenMen's Shirt     30.00   menWomen's Dress   40.00   womenBlue Shirt      30.00   unisex我的方法我想首先我應(yīng)該創(chuàng)建一個(gè)新列,每行都有一個(gè)空白值。然后我應(yīng)該遍歷數(shù)據(jù)框中的每一行并檢查字符串 df[product_name] 以查看它是男裝、女裝還是中性并填寫相應(yīng)的性別行值。這是我的代碼:df['gender'] = ""for product_name in df['product_name']:    if 'women' in product_name.lower():        df['gender'] = 'women'    elif 'men' in product_name.lower():        df['gender'] = 'men'    else:        df['gender'] = 'unisex'但是,我得到以下結(jié)果:product_name    price   genderWomen's pant    20.00   menMen's Shirt     30.00   menWomen's Dress   40.00   menBlue Shirt      30.00   men我非常感謝這里的一些幫助,因?yàn)槲沂?python 和 pandas 庫的新手。
查看完整描述

4 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用列表理解來if/else獲取輸出:


df['gender'] = ['women' if 'women' in word 

                else "men" if "men" in word

                else "unisex" 

                for word in df.product_name.str.lower()]


df


   product_name    price    gender

0   Women's pant    20.0    women

1   Men's Shirt     30.0    men

2   Women's Dress   40.0    women

3   Blue Shirt      30.0    unisex

或者,您可以使用numpy select來獲得相同的結(jié)果:


cond1 = df.product_name.str.lower().str.contains("women")

cond2 = df.product_name.str.lower().str.contains("men")

condlist = [cond1, cond2]

choicelist = ["women", "men"]

df["gender"] = np.select(condlist, choicelist, default="unisex")

通常,對(duì)于字符串,python 的迭代要快得多;你必須測試一下。


查看完整回答
反對(duì) 回復(fù) 2023-03-08
?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

嘗試將您的for語句轉(zhuǎn)換為函數(shù)并使用apply. 所以像 -


def label_gender(product_name):

    '''product_name is a str'''

    if 'women' in product_name.lower():

        return 'women'

    elif 'men' in product_name.lower():

        return 'men'

    else:

        return 'unisex'


df['gender'] = df.apply(lambda x: label_gender(x['product_name']),axis=1)

可以在這里找到使用 apply/lambda 的詳細(xì)分類:https ://towardsdatascience.com/apply-and-lambda-usage-in-pandas-b13a1ea037f7


查看完整回答
反對(duì) 回復(fù) 2023-03-08
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

您也可以使用np.whereSeries.str.contains,


import numpy as np


df['gender'] = (

    np.where(df.product_name.str.contains("women", case=False), 'women',

             np.where(df.product_name.str.contains("men", case=False), "men", 'unisex'))

)

    product_name  price  gender

0   Women's pant   20.0   women

1    Men's Shirt   30.0     men

2  Women's Dress   40.0   women

3     Blue Shirt   30.0  unisex


查看完整回答
反對(duì) 回復(fù) 2023-03-08
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

在短語中使用np.where .str.containsand regex firstword`。以便;


#np.where(if product_name has WomenORMen, 1st Word in Phrase, otherwise;unisex)




 df['Gender']=np.where(df.product_name.str.contains('Women|Men')\

                      ,df.product_name.str.split('(^[\w]+)').str[1],'Unisex')



 

    product_name  price  gender

0   Women's pant   20.0   Women

1    Men's Shirt   30.0     Men

2  Women's Dress  640.0   Women

3    Blue Shirt    30.0  Unisex


查看完整回答
反對(duì) 回復(fù) 2023-03-08
  • 4 回答
  • 0 關(guān)注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)