如何使用python从随机列表长度创建数据?
我想用不同长度的多个列表创建熊猫数据框。下面是我的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
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