基于两列的重组DataFrame
Reorganization DataFrame based on two columns
如果我有一个像这样的数据框
A B
0 a 0
1 a 0
2 a 1
3 a 1
4 a 2
5 a 2
6 b 0
7 b 0
8 b 1
9 b 1
10 b 2
11 b 2
12 c 0
13 c 0
14 c 1
15 c 1
16 c 2
17 c 2
有没有办法重新组织两列并将其变成这样?
所以 B 列遵循模式 0,1,2 并且 A 列中的每个元素都在每个位置?
A B
0 a 0
1 b 1
2 c 2
3 b 0
4 c 1
5 a 2
6 c 0
7 a 1
8 b 2
9 a 0
10 b 1
11 c 2
12 b 0
13 c 1
14 a 2
15 c 0
16 a 1
17 b 2
你可以这样做:
df.reindex((j+i*6)%len(df) for i in range(6) for j in range(0,len(df),8))
为什么有效?您的第一个 0
、1
和 2
的索引是 0
、8
和 16
,因此您需要一个步长为 8 的范围。
range(0,len(df),8)
下一个0
、1
和2
的索引分别是6
、14
和4
,等于6
、14
和 22%len(df)
。相同的模式移动了 6
(j+i*6)%len(df)
6 次以获得整个数据集。
for i in range(6)
Returns :
A B
0 a 0
8 b 1
16 c 2
6 b 0
14 c 1
4 a 2
12 c 0
2 a 1
10 b 2
0 a 0
8 b 1
16 c 2
6 b 0
14 c 1
4 a 2
12 c 0
2 a 1
10 b 2
如果需要重置索引:
df.reindex((j+i*6)%len(df) for i in range(6)
for j in range(0,len(df),8)
).reset_index(drop=True)
Returns
A B
0 a 0
1 b 1
2 c 2
3 b 0
4 c 1
5 a 2
6 c 0
7 a 1
8 b 2
9 a 0
10 b 1
11 c 2
12 b 0
13 c 1
14 a 2
15 c 0
16 a 1
17 b 2
如果我有一个像这样的数据框
A B
0 a 0
1 a 0
2 a 1
3 a 1
4 a 2
5 a 2
6 b 0
7 b 0
8 b 1
9 b 1
10 b 2
11 b 2
12 c 0
13 c 0
14 c 1
15 c 1
16 c 2
17 c 2
有没有办法重新组织两列并将其变成这样?
所以 B 列遵循模式 0,1,2 并且 A 列中的每个元素都在每个位置?
A B
0 a 0
1 b 1
2 c 2
3 b 0
4 c 1
5 a 2
6 c 0
7 a 1
8 b 2
9 a 0
10 b 1
11 c 2
12 b 0
13 c 1
14 a 2
15 c 0
16 a 1
17 b 2
你可以这样做:
df.reindex((j+i*6)%len(df) for i in range(6) for j in range(0,len(df),8))
为什么有效?您的第一个 0
、1
和 2
的索引是 0
、8
和 16
,因此您需要一个步长为 8 的范围。
range(0,len(df),8)
下一个0
、1
和2
的索引分别是6
、14
和4
,等于6
、14
和 22%len(df)
。相同的模式移动了 6
(j+i*6)%len(df)
6 次以获得整个数据集。
for i in range(6)
Returns :
A B
0 a 0
8 b 1
16 c 2
6 b 0
14 c 1
4 a 2
12 c 0
2 a 1
10 b 2
0 a 0
8 b 1
16 c 2
6 b 0
14 c 1
4 a 2
12 c 0
2 a 1
10 b 2
如果需要重置索引:
df.reindex((j+i*6)%len(df) for i in range(6)
for j in range(0,len(df),8)
).reset_index(drop=True)
Returns
A B
0 a 0
1 b 1
2 c 2
3 b 0
4 c 1
5 a 2
6 c 0
7 a 1
8 b 2
9 a 0
10 b 1
11 c 2
12 b 0
13 c 1
14 a 2
15 c 0
16 a 1
17 b 2