如何在Python中基于多个条件更新列值?

2024-09-30 06:30:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下包含各种产品名称的数据框,如下所示:

                                       Name  
0                            1 Enkelt (35%) 
1                          1 Klasses Bitter  
2               1 minute Urban Protect Mask  
3                       10 Years Tawny Port 
4                             100% Frugtbar  
5                       100% Klementinjuice  
6                            100% Kokosvand
7                    1000 kernerugbrød øko. 

查看此产品:1000 kernerugbrød øko.。我试图设置一些条件,以便从末尾删除oko.,并根据丹麦语关于单数和复数的规则,在名称前添加“Økologisk”(单数)或“Økologiske”(复数)。在这种情况下,因为kernerugbrød不是以字母r结尾,所以应该是Økologisk。你知道吗

基本上是这样的:

我在Name列中有一行包含这个值:1000 kernerugbrød øko.->;我删除了oko.,结果是1000 kernerugbrød->;我检查最后一个字母是r还是Økologisk还是Økologiske,这取决于上一步->;最后一个字符串应该是:Økologisk 1000 kernerugbrød。你知道吗

我的尝试如下:

text = "Økologisk "
text2 = "Økologiske "

df['test'] = df['Name'].str.contains(",?\søko.") #creating a new column containing 
                                 #booleans to check which Name contains "oko."

df['Name'] = df['Name'].str.replace(r',?\søko.', "") #replacing "oko." with empty string

if df['test']: #if the Name contained "oko."
    if df['Name'].str.contains("r(\s)?$"): #checking for plural
        df['Name'] = text2 + df['Name']
    else:
        df['Name'] = text + df['Name']

但是,我在if df['test']得到这个错误。你知道吗

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我试着使用上面的建议,但没有一个能真正帮助我完成这项任务。因此,我应该做些什么来修复我的代码,或者应该如何编写我的代码来实现这个问题的正确解决方案?你知道吗


Tags: nametestgtdfif字母ko复数
1条回答
网友
1楼 · 发布于 2024-09-30 06:30:32

我想你可以使用双^{}

m1 = df['Name'].str.contains(",?\søko.") #creating a new column containing 
                                 #booleans to check which Name contains "oko."

df['Name'] = df['Name'].str.replace(r',?\søko.', "") #replacing "oko." with empty string

m2 = df['Name'].str.contains("r(\s)?$")

df['Name'] = np.where(~m1, df['Name'],
             np.where(m2, text2, text) + df['Name'])

相关问题 更多 >

    热门问题