如何使用python从随机列表长度创建数据?

如何使用python从随机列表长度创建数据?,python,pandas,dataframe,Python,Pandas,Dataframe,我想用不同长度的多个列表创建熊猫数据框。下面是我的python代码 import pandas as pd A=[1,2] B=[1,2,3] C=[1,2,3,4,5,6] lenA = len(A) lenB = len(B) lenC = len(C) df = pd.DataFrame(columns=['A', 'B','C']) for i,v1 in enumerate(A): for j,v2 in enumerate(B): for k, v3

我想用不同长度的多个列表创建熊猫数据框。下面是我的python代码

import pandas as pd

A=[1,2]
B=[1,2,3]
C=[1,2,3,4,5,6]

lenA = len(A)
lenB = len(B)
lenC = len(C)

df = pd.DataFrame(columns=['A', 'B','C'])

for i,v1 in enumerate(A):
    for j,v2 in enumerate(B):
        for k, v3 in enumerate(C):
            if(i<random.randint(0, lenA)):
                if(j<random.randint(0, lenB)):
                    if (k < random.randint(0, lenC)):
                        df = df.append({'A': v1, 'B': v2,'C':v3}, ignore_index=True)            
print(df)
在每次运行中,我得到了不同的输出,这是正确的。但不包括每次运行中的所有列表项。在一次运行中,我得到以下输出:

   A  B  C
0  1  1  3
1  1  2  1
2  1  2  2
3  2  2  5
在上述输出“A”列表中,所有项目(1,2)都存在。但是“B”列表只有(1,2)项,缺少第3项。此外,列表“C”仅包含(1,2,3,5)项。(4,6,7)“C”列表中缺少项目。我的期望是:在每个列表中,每个项目都应该至少在数据框中出现一次,“C”列表项目应该只在数据框中出现一次。我预期的示例输出如下所示:

   A  B  C
0  1  1  3
1  1  2  1
2  1  2  2
3  2  2  5
4  2  3  4
5  1  1  7
6  2  3  6

引导我获得预期的输出。提前感谢。

您可以使用转置来实现同样的效果。 编辑:用于按要求随机输出

import pandas as pd
from random import shuffle, choice


A=[1,2]
B=[1,2,3]
C=[1,2,3,4,5,6]
shuffle(A)
shuffle(B)
shuffle(C)

data = [A,B,C]

df = pd.DataFrame(data)
df = df.transpose()
df.columns = ['A', 'B', 'C']
df.loc[:,'A'].fillna(choice(A), inplace=True)
df.loc[:,'B'].fillna(choice(B), inplace=True)
这将给出以下输出

     A    B    C
0  1.0  1.0  1.0
1  2.0  2.0  2.0
2  NaN  3.0  3.0
3  NaN  4.0  4.0
4  NaN  NaN  5.0
5  NaN  NaN  6.0

您可以将每个列表的随机值添加到总长度,然后使用:


非常感谢您宝贵的回复。但A和B列不应具有“NaN”值。它应该是A和B值中的任意一个。行/数据帧的创建也应该是随机的。在这种情况下指导我。谢谢。使用随机模块提供了一定程度的随机输出。非常感谢您的宝贵指导。根据您建议的代码,我得到了预期的输出。谢谢
     A    B    C
0  1.0  1.0  1.0
1  2.0  2.0  2.0
2  NaN  3.0  3.0
3  NaN  4.0  4.0
4  NaN  NaN  5.0
5  NaN  NaN  6.0
A=[1,2]
B=[1,2,3]
C=[1,2,3,4,5,6]

L = [A,B,C]
m = max(len(x) for x in L)
print (m)
6

a = [np.hstack((np.random.choice(x, m - len(x)), x)) for x in L]

df = pd.DataFrame(a, index=['A', 'B', 'C']).T.sample(frac=1)
print (df)
   A  B  C
2  2  2  3
0  2  1  1
3  1  1  4
4  1  2  5
5  2  3  6
1  2  2  2