Python 创建具有重复值的数据帧

Python 创建具有重复值的数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试创建一个类似于: 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' : [-

我正在尝试创建一个类似于:

   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('数组必须都具有相同的长度')ValueError:数组必须 都是一样长的

我当然可以做到:

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
或用于:

备选方案:

df = pd.DataFrame({'AAA' :  np.repeat((4,5), (2, 2)),
                   'BBB' : [10,20,30,40],
                   'CCC' : [100,50,-30,-50]})


对于一般解决方案,您可以执行以下操作:

import pandas as pd

data = [(4, 2), (5, 2)]
df = pd.DataFrame({'AAA' : [value for value, reps in data for _ in range(reps)], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
print(df)

其中数据是一个值列表,重复元组。因此,对于您的特定示例,您有4个重复2次,5个重复2次,因此
[(4,2),(5,2)]
您得到的错误非常清楚。从字典创建数据帧时,所有数组的长度必须相同。创建词典时,如果多次提供相同的键,则使用最后一个键。所以

{'AAA' : [4] * 2, 'AAA': [5]*2, 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}

{'AAA': [5]*2, 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}
当您尝试从该词汇表创建数据帧时,您希望一列包含2行,两列包含4行,因此会出现错误。正如@jezrael所指出的,您可以通过加入列表,然后从该列表创建数据帧来创建所需的“AAA”列

{'AAA' : [4] * 2, 'AAA': [5]*2, 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}
{'AAA': [5]*2, 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}