目标
原始表:
number Q1 Q2 Q3
0 1 B0 C0 D0
1 1 B1 C1 D1
2 1 B2 C2 D2
3 1 B3 C3 D3
变为:
number Q1 Q2 Q3
0 1 B0 C0 D0
1 1 B1 C1 D1
2 1 B2 C2 D2
3 1 B3 C3 D3
0 2 B0 C0 D0
1 2 B1 C1 D1
2 2 B2 C2 D2
3 2 B3 C3 D3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3
>>> x=pd.DataFrame({'number': [1,1,1,1],
'Q1': ['B0', 'B1', 'B2', 'B3'],
'Q2': ['C0', 'C1', 'C2', 'C3'],
'Q3': ['D0', 'D1', 'D2', 'D3']},)
>>> x
number Q1 Q2 Q3
0 1 B0 C0 D0
1 1 B1 C1 D1
2 1 B2 C2 D2
3 1 B3 C3 D3
>>> number_lt=[1,2,3]
>>> lt = []
>>> for j in number_lt:
x['number'] = j
lt.append(x)
>>> lt
[ number Q1 Q2 Q3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3, number Q1 Q2 Q3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3, number Q1 Q2 Q3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3]
单独打印x,是可以得到想要的结果的,但是保存在列表中时,却出现先前保存的值被覆盖的情况。
>>> for j in number_lt:
x['number'] = j
print(x)
number Q1 Q2 Q3
0 1 B0 C0 D0
1 1 B1 C1 D1
2 1 B2 C2 D2
3 1 B3 C3 D3
number Q1 Q2 Q3
0 2 B0 C0 D0
1 2 B1 C1 D1
2 2 B2 C2 D2
3 2 B3 C3 D3
number Q1 Q2 Q3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3
解决方法: 把x改为x.copy()
>>> number_lt=[1,2,3]
>>> lt = []
>>> for j in number_lt:
x['number'] = j
lt.append(x.copy())
>>> lt
[ number Q1 Q2 Q3
0 1 B0 C0 D0
1 1 B1 C1 D1
2 1 B2 C2 D2
3 1 B3 C3 D3, number Q1 Q2 Q3
0 2 B0 C0 D0
1 2 B1 C1 D1
2 2 B2 C2 D2
3 2 B3 C3 D3, number Q1 Q2 Q3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3]
最后用concat连接起来
>>> pd.concat(lt)
number Q1 Q2 Q3
0 1 B0 C0 D0
1 1 B1 C1 D1
2 1 B2 C2 D2
3 1 B3 C3 D3
0 2 B0 C0 D0
1 2 B1 C1 D1
2 2 B2 C2 D2
3 2 B3 C3 D3
0 3 B0 C0 D0
1 3 B1 C1 D1
2 3 B2 C2 D2
3 3 B3 C3 D3