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