Python 根据行对值进行排序并创建新列

Python 根据行对值进行排序并创建新列,python,pandas,dataframe,sorting,Python,Pandas,Dataframe,Sorting,我有一个来自熊猫的数据帧: df = pd.DataFrame({'Job': ['Math', 'Math', 'Math', 'Math', 'Physics', 'Physics', 'Physics', 'English', 'English', 'English'], 'First_Name': ['William', 'James', 'Harper', 'William', 'Maso

我有一个来自熊猫的
数据帧

df = pd.DataFrame({'Job': ['Math', 'Math', 'Math', 'Math', 'Physics', 'Physics', 'Physics',
                             'English', 'English', 'English'],
                    'First_Name': ['William', 'James', 'Harper', 'William', 'Mason', 'Evelyn', 'Jacob',
                             'Eve', 'Ana', 'Theo'],
                    'Building': ['A1', 'A2', 'A3', 'A1', 'A2',  'A3', 'A1', 'A3', 'A1', 'A2'],
                    'Years_employed': [1, 2, 4, 6, 1, 4, 2, 3, 3, 2]},
                    columns=['Job', 'First_Name', 'Building', 'Years_employed'])

print(df)
我所尝试的:

dfs = df.sort_values(['Building', 'Years_employed'])
dfs['answer'] = dfs['Job'].shift(-1)
dfs.loc[:, "answer"] = dfs.Job == dfs.answer
(它不起作用,因为idk如何指定行(N)和行(N-1)应具有相同的建筑)


我如何通过建筑来确定新员工是否与她之前在同一建筑中受雇的人有相同的工作?

您可以使用np.where和shift:

dfs = df.sort_values(['Building', 'Years_employed'])    

dfs['result'] = np.where(((dfs.Job == dfs.Job.shift(1)) & (dfs.Building==dfs.Building.shift(1))), True, False)
示例(我使用了另一个数据帧作为当前数据帧,但没有生成真实值):

输出:

       Job First_Name Building  Years_employed  result
0  Math     William    A1       1               False
1  Math     James      A1       2               True
6  Physics  Jacob      A1       2               False
8  English  Ana        A1       3               False
2  Math     Harper     A1       4               False
3  Math     William    A1       6               True
4  Physics  Mason      A2       1               False
9  English  Theo       A2       2               False
7  English  Eve        A3       3               False
5  Physics  Evelyn     A3       4               False

这对詹姆斯来说是正确的(在他之前有威廉),但对威廉来说是错误的,因为他之前没有人可以比较。这不是你想要的吗?哦,我明白了,在默认情况下,威廉和梅森之间(至于西奥和夏娃),这将是错误的,因为他们不在同一栋楼里?恰恰是西奥和夏娃。威廉和梅森也有不同的工作,所以肯定是假的
       Job First_Name Building  Years_employed  result
0  Math     William    A1       1               False
1  Math     James      A1       2               True
6  Physics  Jacob      A1       2               False
8  English  Ana        A1       3               False
2  Math     Harper     A1       4               False
3  Math     William    A1       6               True
4  Physics  Mason      A2       1               False
9  English  Theo       A2       2               False
7  English  Eve        A3       3               False
5  Physics  Evelyn     A3       4               False