所以我有一个包含多列的数据框,我想尝试找出“ 已链接.. ”列中的值是否在名为“ 新名称”的列中。 strong>”,如果是,则应以“ cell.value-是”的方式设置特定的单元格值;否则,应以“ cell.value-否”的方式设置
create prozedure hochdrei
(declare @ x int)
declare @x int
begin
set @x = 3
print power(@x, 3)
return x
end
所以预期结果应该如下表;
import pandas as pd
d = {'New Names': ['a,b,c','a','c,d,e,f','a'], 'Linked Letter 0':
['a','b','c','d'],
'Linked Letter 1': ['c','s','v','None'],
'Linked Letter 2': ['None','None','d','s']}
df_new = pd.DataFrame(data=d)
df_new
Index New Names Linked Letter 0 Linked Letter 1 Linked Letter 2
------- ----------- ----------------- ----------------- -----------------
0 a,b,c a c None
1 a b s None
2 c,d,e,f c v d
3 a d None s
以下提供的解决方案存在一个问题:
问题是映射到YES和NO到值有时无法按预期工作。例如,即使新名称列中的值在两行中相同,但最后获得YES的相同值在下一行中也将获得NO。
您为什么认为会发生这种情况?
答案 0 :(得分:2)
您可以使用pd.DataFrame.filter
来过滤Linked
列,使用列表理解来构造布尔数组,最后使用loc
和np.where
来创建条件逻辑:>
df = pd.DataFrame(data=d)
for col in df.filter(like='Linked'):
bools = [link in new_names for link, new_names in zip(df[col], df['New Names'])]
df.loc[df[col] != 'None', col] += pd.Series(np.where(bools, ' - YES', ' - NO'))
print(df)
Linked Letter 0 Linked Letter 1 Linked Letter 2 New Names
0 a - YES c - YES None a,b,c
1 b - NO s - NO None a
2 c - YES v - NO d - YES c,d,e,f
3 d - NO None s - NO a