我想将一组数据帧行移动到起始
相应行的索引如下:
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
最后我完成了以下步骤:
- 获取所需的行子集
- 从原始数据帧中删除这些行
- 将所需的行与数据帧的其余部分连接起来
代码:
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)