我有一个这样的数据框:
Q
45
21
32
45
54
65
78
55
56
546
55
566
56
566
581
55
我需要将此特定列转换为:
Q A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
45 21 32 45 54 65 78 55 56 546 55 566 56
21 32 45 54 65 78 55 56 546 55 566 56 566
32 45 54 65 78 55 56 546 55 566 56 566 581
45 54 65 78 55 56 546 55 566 56 566 581 55
54 65 78 55 56 546 55 566 56 566 581 55 0
65 78 55 56 546 55 566 56 566 581 55 0 0
78 55 56 546 55 566 56 566 581 55 0 0 0
55 56 546 55 566 56 566 581 55 0 0 0 0
56 546 55 566 56 566 581 55 0 0 0 0 0
546 55 566 56 566 581 55 0 0 0 0 0 0
55 566 56 566 581 55 0 0 0 0 0 0 0
566 56 566 581 55 0 0 0 0 0 0 0 0
56 566 581 55 0 0 0 0 0 0 0 0 0
566 581 55 0 0 0 0 0 0 0 0 0 0
581 55 0 0 0 0 0 0 0 0 0 0 0
55 0 0 0 0 0 0 0 0 0 0 0 0
此数据框。 当我也尝试轮班时,我无法实现输出。
答案 0 :(得分:1)
将Series.shift
与在for
循环中创建的新列一起使用:
for i in range(1, 13):
df[f'A{i}'] = df['Q'].shift(-i, fill_value=0)
print (df)
Q A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
0 45 21 32 45 54 65 78 55 56 546 55 566 56
1 21 32 45 54 65 78 55 56 546 55 566 56 566
2 32 45 54 65 78 55 56 546 55 566 56 566 581
3 45 54 65 78 55 56 546 55 566 56 566 581 55
4 54 65 78 55 56 546 55 566 56 566 581 55 0
5 65 78 55 56 546 55 566 56 566 581 55 0 0
6 78 55 56 546 55 566 56 566 581 55 0 0 0
7 55 56 546 55 566 56 566 581 55 0 0 0 0
8 56 546 55 566 56 566 581 55 0 0 0 0 0
9 546 55 566 56 566 581 55 0 0 0 0 0 0
10 55 566 56 566 581 55 0 0 0 0 0 0 0
11 566 56 566 581 55 0 0 0 0 0 0 0 0
12 56 566 581 55 0 0 0 0 0 0 0 0 0
13 566 581 55 0 0 0 0 0 0 0 0 0 0
14 581 55 0 0 0 0 0 0 0 0 0 0 0
15 55 0 0 0 0 0 0 0 0 0 0 0 0
对于第二个样本数据:
for i in range(1, 13):
df[f'A{i}'] = df['Q'].shift(-i, fill_value=0)
print (df)
Q A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12
0 45 21 32 45 54 65 57 0 0 0 0 0 0
1 21 32 45 54 65 57 0 0 0 0 0 0 0
2 32 45 54 65 57 0 0 0 0 0 0 0 0
3 45 54 65 57 0 0 0 0 0 0 0 0 0
4 54 65 57 0 0 0 0 0 0 0 0 0 0
5 65 57 0 0 0 0 0 0 0 0 0 0 0
6 57 0 0 0 0 0 0 0 0 0 0 0 0
如果需要所有列:
for i in range(1, len(df)):
df[f'A{i}'] = df['Q'].shift(-i, fill_value=0)