Skip to main content
 首页 » 编程设计

python之如何在满足条件时标记一行

2025年05月04日15xiaohuochai

如果我有一个数据框,

df = pd.DataFrame({ 
              'name' : ['A', 'B', 'C'], 
              'john_01' : [1, 2, 3], 
              'mary_02' : [4,5,6], 
                 }) 

如果 column['name'] 等于包含“A”和“B”的列表,我想附加一个带有名称的标记“#”。然后我可以在结果中看到类似下面的内容,有谁知道如何以优雅的方式使用 pandas 来做到这一点?

name_list = ['A','B','D']  # But we only have A and B in df. 
 
   john_01  mary_02 name 
0        1        4   #A   
1        2        5   #B 
2        3        6    C 

请您参考如下方法:

如果 name_list 的长度与 Series name 的长度相同,那么你可以试试这个:

df1['name_list'] = ['A','B','D'] 
df1.ix[df1.name == df1.name_list, 'name'] = '#'+df1.name 

只有当当前索引的 name 和 name_list 的值相同时,才会在前面加上“#”。

In [81]: df1 
Out[81]:  
   john_01  mary_02 name name_list 
0        1        4   #A         A 
1        2        5   #B         B 
2        3        6    C         D 
 
In [82]: df1.drop('name_list', axis=1, inplace=True) # Drop assist column 

如果两者的长度不同——因此你不关心索引——那么你可以试试这个:

In [84]: name_list = ['A','B','D'] 
 
In [87]: df1.ix[df1.name.isin(name_list), 'name'] = '#'+df1.name 
 
In [88]: df1 
Out[88]:  
   john_01  mary_02 name 
0        1        4   #A 
1        2        5   #B 
2        3        6    C 

希望对您有所帮助。