gpt4 book ai didi

python - 使用列表理解对数据帧的子集进行切片

转载 作者:行者123 更新时间:2023-12-01 06:59:36 25 4
gpt4 key购买 nike

我想运行列表理解,以在由其他列中的值定义的子集中的一列中按“-”对名称进行切片。

所以在这种情况下:

    category   product_type   name 
0 pc unit hero-dominator
1 print unit md-ffx605
2 pc option keyboard1.x-963

我对“pc”类别和“unit”产品类型感兴趣,因此我希望列表理解仅将“name”列的第一行更改为以下形式:

    category   product_type   name 
0 pc unit dominator
1 print unit md-ffx605
2 pc option keyboard1.x-963

我尝试过这个:

df['name'].loc[df['product_type']=='unit'] = [x.split('-')[1] for x in df['name'].loc[df['product_type']=='unit']]

但是我遇到了“列表索引超出范围”IndexError。

非常感谢任何帮助。

最佳答案

您可以通过以下方式解决问题,欢迎关注评论并随时提问:

编辑,现在我们认为“name”列中不能有字符串元素:

import pandas as pd
import numpy as np


def change(row):
if row["category"] == "pc" and row["product_type"] == "unit":
if type(row["name"]) is str: # check if element is string before split()
name_split = row["name"].split("-") # split element
if len(name_split) == 2: # it could be name which does not have "-" in it, check it here
return name_split[1] # if "-" was in name return second part of split result
return row["name"] # else return name without changes

return row["name"]


# create data frame:
df = pd.DataFrame(
{
"category": ["pc", "print", "pc", "pc", "pc", "pc"],
"product_type": ["unit", "unit", "option", "unit", "unit", "unit"],
"name": ["hero-dominator", "md-ffx605", "keyboard1.x-963", np.nan, 10.24, None]
}
)


df["name"] = df.apply(lambda row: change(row), axis=1) # change data frame here
print(df)

关于python - 使用列表理解对数据帧的子集进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com