我有一个 Pandas 数据框,我需要检查一个列值是否在另一列值中可用,并基于它再创建 2 个列。我的数据框看起来像这样:Dept-x Country Age Category Dept-yMath India Young Good Math,Social,English,Science,FrenchMath India Adult Good Math,Social,English,Science,FrenchSocial Aus Young Average Science,Math,Social, English, FrenchScience Pak Young Good Math,Social,English,Practical,FrenchScience Pak Adult Average Math,Social,Science,French,EnglishScience Pak Adult Good Science,Math,Social, English, French预期数据帧:Top 3 Top all1 11 10 10 01 11 1因此,在预期的数据框中,除了现有的列之外,我们还需要添加两列(即前 3 位和全部位居前列)。如果 Dept-x 的值在 Dept-y 的前 3 个值中可用,则 Top 3 和 Top all 的值都应为 1。如果 Dept-x 的值在前 3 个值中不可用,但存在于 Dept-y 中,则前 3 个值应为 0,Top all 应为 1。如果 Dept-x 的值在 Dept-y 中根本不可用,则 Top 3 和 Top all 的值都应为 0。如果有人可以帮助我实现这一目标,我将不胜感激?
2 回答

交互式爱情
TA贡献1712条经验 获得超3个赞
你可以像这样使用列表理解:
df['Top 3']=[1 if x in y.split(',')[:3] else 0 for x,y in zip(df['Dept-x'], df['Dept-y'])]
df['Top all']=[1 if x in y else 0 for x,y in zip(df['Dept-x'], df['Dept-y'])]

湖上湖
TA贡献2003条经验 获得超2个赞
我会尝试这样的事情吗?
df['Top 3'] = 0
df['Top all'] = 0
df.loc[df['Dept-x'] in list(df['Dept-y']),'Top all']=1
df.loc[df['Dept-x'] in list(df['Dept-y'])[:3],'Top 3','Top all']=1
添加回答
举报
0/150
提交
取消