比较两个列的值,并根据比较结果再创建2个列

时间:2019-01-07 19:19:54

标签: python pandas

我有一个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。

如果有人可以帮助我实现这一目标,我将不胜感激?

2 个答案:

答案 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
相关问题