在数据框中将列重塑为行

时间:2020-03-05 07:26:56

标签: python pandas

我有一个这样的数据框:

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

此数据框。 当我也尝试轮班时,我无法实现输出。

1 个答案:

答案 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)