我有以下数据框架:
将pandas导入为pd
data = [['Construction', '', '01/02/2022', '01/06/2022', '1', 'No'], ['Level Site', 'Construction', '01/02/2022', '01/02/2022', '2', 'No'], ['Foundation', '', '01/03/2023', '01/06/2023', '1', 'Yes'],['Lay Foundation', 'Construction>Foundation', '01/03/2022', '01/04/2022', '3', 'No'], ['Prepare land for foundation', 'Construction>Foundation', '01/05/2022', '01/06/2022', '3', 'No'],['Building Envelope', '', '01/07/2023', '01/16/2023', '1', 'No'], ['Install Footings', 'Building Envelope', '01/07/2022', '01/07/2022', '2', 'Yes'], ['Pouring', '', '01/08/202', '01/09/2023', '1', 'No'],['Pour Foundation', 'Building Envelope>Pouring', '01/08/2022', '01/09/2022', '3', 'No'], ['Installation', '', '01/09/2022', '01/14/2022', '1', 'No']]
df1 = pd.DataFrame(data, columns=['Activity', 'Parent', 'Start', 'Finish', 'WBS Level', 'Match'])
df1
字符串
理想的数据框架输出
data = [['Construction', '', '01/02/2022', '01/06/2022', '1', 'No'],['Foundation', '', '01/03/2023', '01/06/2023', '1', 'Yes'], ['Level Site', 'Construction', '01/02/2022', '01/02/2022', '2', 'No'], ['Lay Foundation', 'Construction>Foundation', '01/03/2022', '01/04/2022', '3', 'No'], ['Prepare land for foundation', 'Construction>Foundation', '01/05/2022', '01/06/2022', '3', 'No'],['Install Footings', 'Building Envelope', '01/07/2022', '01/07/2022', '2', 'Yes'],['Building Envelope', '', '01/07/2023', '01/16/2023', '1', 'No'], ['Pouring', '', '01/08/202', '01/09/2023', '1', 'No'],['Pour Foundation', 'Building Envelope>Pouring', '01/08/2022', '01/09/2022', '3', 'No'], ['Installation', '', '01/09/2022', '01/14/2022', '1', 'No']]
df2 = pd.DataFrame(data, columns=['Activity', 'Parent', 'Start', 'Finish', 'WBS Level', 'Match'])
df2
型
我正在准备这些数据,以便在调度软件应用程序中使用,并且需要根据某些条件对行进行重新排序。我为此创建了'match'列(我已经创建了我的条件,任何为'yes'的行都满足了条件)。
对于任何在'match'列中具有'yes'值的行,我想向上移动一行。我试过.shift方法的变化,但我有困难得到正确。我不想删除或覆盖任何行,我只需要将任何“yes”行向上移动1。
谢谢你的帮助
3条答案
按热度按时间7xllpg7q1#
IIUC和你的输入数据框有默认的范围索引,那么你可以通过从每个索引中减去1.5,如果'是',并通过新索引重新排序数据框来实现:
字符串
输出量:
型
q5iwbnjs2#
这里有一个使用索引而不是使用
.shift()
交换所需行的解决方案(因为我不清楚如何在groupby()
中执行此操作)。可能无法很好地扩展,但应该在较小的数据集上完成这项工作。字符串
34gzjxbg3#
字符串
这里有另一种方法,它不是很快,但仍然可以完成工作:
型