从列表的笛卡尔积创建一个PandasDataFrame

我有一些 python 代码,它运行一个简单的 for 循环并打印出结果的每个组合,我试图根据结果产生的顺序弄清楚如何将这些全部附加到单个数据帧中。我将在下面解释.

我有以下代码:

categories = ['small', 'medium', 'big']
parameters = ['p1_5_p2_4_p3_2', 'p1_3_p2_8_p3_3', 'p1_4_p2_3_p3_6']
Blue = [5, 4, 3]

for parameter in parameters:
    for category in categories:
        for x in Blue:
            y = x + 1
            z = x + 2
            
            print(category)
            print(parameter)
            print(y)
            print(z)
            print('')

它产生:

small
p1_5_p2_4_p3_2 
6 
7

small 
p1_5_p2_4_p3_2 
5 
6

small 
p1_5_p2_4_p3_2 
4 
5

medium 
p1_5_p2_4_p3_2 
6 
7

medium 
p1_5_p2_4_p3_2 
5 
6

medium 
p1_5_p2_4_p3_2 
4 
5

big 
p1_5_p2_4_p3_2 
6 
7

big 
p1_5_p2_4_p3_2 
5 
6

big
p1_5_p2_4_p3_2 
4 
5 

small
p1_3_p2_8_p3_3
6 
7
...

有没有办法将它发送到熊猫数据帧,以便数据帧看起来像:

Category      Parameters         Value_1    Value_2
----------------------------------------------------
small         p1_5_p2_4_p3_2           6          7 
small         p1_5_p2_4_p3_2           5          6
small         p1_5_p2_4_p3_2           4          5
medium        p1_5_p2_4_p3_2           6          7
medium        p1_5_p2_4_p3_2           5          6
medium        p1_5_p2_4_p3_2           4          5
big           p1_5_p2_4_p3_2           6          7
big           p1_5_p2_4_p3_2           5          6
big           p1_5_p2_4_p3_2           4          5
small         p1_3_p2_8_p3_3           6          7   
...  

有没有办法将我的初始输出组织到这个数据框中?

回答

您可以使用itertools.product

from itertools import product

categories = ["small", "medium", "big"]
parameters = ["p1_5_p2_4_p3_2", "p1_3_p2_8_p3_3", "p1_4_p2_3_p3_6"]
Blue = [5, 4, 3]

df = pd.DataFrame(
    product(categories, parameters, np.array(Blue) + 1, np.array(Blue) + 2),
    columns=["Category", "Parameters", "Value_1", "Value_2"],
)
print(df)

印刷:

   Category      Parameters  Value_1  Value_2
0     small  p1_5_p2_4_p3_2        6        7
1     small  p1_5_p2_4_p3_2        6        6
2     small  p1_5_p2_4_p3_2        6        5
3     small  p1_5_p2_4_p3_2        5        7
4     small  p1_5_p2_4_p3_2        5        6

...


以上是从列表的笛卡尔积创建一个PandasDataFrame的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>