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

我想用多个不同长度的列表创建pandas数据框架。下面是我的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=[1,2]
B=[1,2,3]
C=[1,2,3,4,5,6,7]

在每次运行中,我得到了不同的输出,哪些是正确的。但并不是每次运行都能覆盖所有的列表项。在一次运行中,我得到了如下的输出。

   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

请指导我得到我期望的输出。先谢谢你。

解决方案:

你可以将每个列表的随机值加到总长度上,然后使用 DataFrame.sample:

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

给TA打赏
共{{data.count}}人
人已打赏
解决方案

Google Drive API无法处理大型App Script项目上传。

2022-5-11 22:00:14

解决方案

C# IQueryable LINQ Group By with null values.

2022-5-11 22:00:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索