我有一个pandas数据框,我需要检查一个列值是否可以在另一个列值中使用,并根据它再创建2个列。
我的数据框如下:
Dept-x Country Age Category Dept-y
Math India Young Good Math,Social,English,Science,French
Math India Adult Good Math,Social,English,Science,French
Social Aus Young Average Science,Math,Social, English, French
Science Pak Young Good Math,Social,English,Practical,French
Science Pak Adult Average Math,Social,Science,French,English
Science Pak Adult Good Science,Math,Social, English, French
预期数据框:
Top 3 Top all
1 1
1 1
0 1
0 0
1 1
1 1
因此,在预期的数据框中,除了现有的列之外,我们还需要添加两列(即Top 3和Top all)。
如果在Dept-y的前3个值中可以使用Dept-x的值,则Top 3和Top all的值都应为1。
如果Dept-x的值在前3个值中不可用,但在Dept-y中存在,则Top 3应该为0,Top all应该为1。
如果Dept-y中根本没有Dept-x的值,则Top 3和Top all的值都应为0。
如果有人可以帮助我实现这一目标,我将不胜感激?
答案 0 :(得分: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'])]
答案 1 :(得分:-1)
我会尝试这样的事情吗?
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