如果我有一个数据框,
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
希望对您有所帮助。
