亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據條件填充數據框行的值

根據條件填充數據框行的值

翻翻過去那場雪 2023-03-08 14:49:42
背景我有一個如下所示的數據集:product_name    priceWomen's pant    20.00Men's Shirt     30.00Women's Dress   40.00Blue Shirt      30.00...我希望創建一個名為性別它將包含基于 product_name 中的字符串的值 Women、Men 或 Unisex期望的結果如下所示:product_name    price   genderWomen's pant    20.00   womenMen's Shirt     30.00   menWomen's Dress   40.00   womenBlue Shirt      30.00   unisex我的方法我想首先我應該創建一個新列,每行都有一個空白值。然后我應該遍歷數據框中的每一行并檢查字符串 df[product_name] 以查看它是男裝、女裝還是中性并填寫相應的性別行值。這是我的代碼: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'但是,我得到以下結果:product_name    price   genderWomen's pant    20.00   menMen's Shirt     30.00   menWomen's Dress   40.00   menBlue Shirt      30.00   men我非常感謝這里的一些幫助,因為我是 python 和 pandas 庫的新手。
查看完整描述

4 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

您可以使用列表理解來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來獲得相同的結果:


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")

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


查看完整回答
反對 回復 2023-03-08
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

嘗試將您的for語句轉換為函數并使用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 的詳細分類:https ://towardsdatascience.com/apply-and-lambda-usage-in-pandas-b13a1ea037f7


查看完整回答
反對 回復 2023-03-08
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

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


查看完整回答
反對 回復 2023-03-08
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

在短語中使用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


查看完整回答
反對 回復 2023-03-08
  • 4 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號