将数据帧的一组行移到开头



我想将一组数据帧行移动到起始

相应行的索引如下:

indexes = [2188, 2163, 37, 47, 36, 41, 61, 1009, 40, 39, 123, 121, 2151, 19, 2, 8, 117, 205, 204]

因此:

index 204 -> index 0
index 205 -> index 1
.
.
index 2188 -> index 18

目前,我有一个代码,只允许移动一行:

def move_row(index):
idx = [index] + [i for i in range(len(df)) if i != index]
return df.iloc[idx].reset_index(drop=True)

这里有一种方法,它基于使用集合论从索引创建新的集合列表来重新索引DataFrame。这在一定程度上假设索引是唯一的。

import pandas as pd
## sample DataFrame
d = {'col1': [0, 1, 2, 3, 4], 'col2': [4, 5, 6, 9, 5], 'col3': [7, 8, 12, 1, 11]}
df = pd.DataFrame(data=d)
print(df)
##    col1  col2  col3
## 0     0     4     7
## 1     1     5     8
## 2     2     6    12
## 3     3     9     1
## 4     4     5    11
indexes = [3, 1]
new_idx = indexes + list(set(range(len(df))).difference(indexes))
df = df = df.iloc[new_idx].reset_index(drop = True)
print(df)
##    col1  col2  col3
## 0     3     9     1
## 1     1     5     8
## 2     0     4     7
## 3     2     6    12
## 4     4     5    11

最后我完成了以下步骤:

  1. 获取所需的行子集
  2. 从原始数据帧中删除这些行
  3. 将所需的行与数据帧的其余部分连接起来

代码:

indexes = [2430, 2187, 2199, 37, 47, 36, 121, 41, 61, 1009, 40, 39, 123, 2151, 19, 2, 8, 117, 205, 204]
rows = df.iloc[indexes].reset_index(drop = True)
del_rows_df = df.drop(indexes).reset_index(drop = True)
new_df = pd.concat([rows, del_rows_df]).reset_index(drop = True)

最新更新