pandas 合并数据遇到的坑

目标

原始表:

 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

猜你喜欢

转载自blog.csdn.net/m0_37586991/article/details/89633777