我正在尝试创建一个看起来像这样的 pandas df:
AAA BBB CCC
0 4 10 100
1 4 20 50
2 5 30 -30
3 5 40 -50
为了实现,我现在创建两个数据框
df1 = pd.DataFrame({'AAA' : [4] * 2 , 'BBB' : [10,20], 'CCC' : [100,50]})
df2 = pd.DataFrame({'AAA': [5]*2, 'BBB' : [30,40],'CCC' : [-30,-50]})
然后将 df2 的行附加到 df1 以创建所需的 df
我试过
df = pd.DataFrame({'AAA' : [4] * 2, 'AAA': [5]*2, 'BBB' :
[10,20,30,40],'CCC' : [100,50,-30,-50]}); df
但是我收到错误消息:
ValueError('arrays must all be same length') ValueError: arrays must all be the same length
我当然可以:
df = pd.DataFrame({'AAA' : [4,4,5,5], 'BBB' : [10,20,30,40],'CCC' :
[100,50,-30,-50]}); df
但是没有另一种优雅的方式来做到这一点吗?这个小例子很容易实现,但如果我想扩展到很多行,输入就会变得很长。
请您参考如下方法:
我相信您需要通过 + 加入列表:
df = pd.DataFrame({'AAA' : [4]*2 + [5]*2, 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
print (df)
AAA BBB CCC
0 4 10 100
1 4 20 50
2 5 30 -30
3 5 40 -50
或者使用repeat与 concatenate :
df = pd.DataFrame({'AAA' : np.concatenate([np.repeat(4, 2), np.repeat(5, 2)]),
'BBB' : [10,20,30,40],
'CCC' : [100,50,-30,-50]})
备选方案:
df = pd.DataFrame({'AAA' : np.repeat((4,5), 2),
'BBB' : [10,20,30,40],
'CCC' : [100,50,-30,-50]})
print (df)
AAA BBB CCC
0 4 10 100
1 4 20 50
2 5 30 -30
3 5 40 -50
