如何从多个列表的每个唯一组合创建一个熊猫数据框?

时间:2019-08-23 12:39:29

标签: python pandas combinations nested-lists

我试图基于四个不同长度列表的每个唯一组合来创建一个熊猫数据框。我是一个相对初学者。

我像这样构造了一个嵌套的组合列表:

combinations = [
    [
        [
            [
                [w,x,y,z]for w in sexes
            ]
            for x in ages
        ]
        for y in destination_codes
    ] 
    for z in origin_codes
]

其中每个都是简单列表。效果很好,但我不知道如何将其放入四列框架中,每种独特组合仅包含一行,就像这样:

https://imgur.com/a/b9gNWJa

我尝试过:

total = pd.DataFrame(columns=['origin', 'destination', 'age', 'sex'])
    for first in combinations:
        for second in first:
            for third in second:
                for fourth in third:
                    summary_table = pd.DataFrame({'Origin': [first], 'Destination': [second], 'Age': [third], 'Sex:' [fourth])
                    total.append(summary_table)

根本不起作用。

任何指针都将非常有帮助-我不确定这是一个简单的错误还是我是否以错误的方式解决了整个问题。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您的要求正确吗?

combinations = [
    [w,x,y,z]
    for w in sexes
    for x in ages
    for y in destination_codes
    for z in origin_codes
]
total_df = pd.DataFrame(combinations, columns=['sex', 'age', 'origin', 'destination'])

但是在这里使用列表理解可能效率很低。使用itertools.product

有更好的方法
from itertools import product
combinations = list(product(ages, ages, origin_codes, destination_codes))

答案 1 :(得分:0)

使用itertools.product。它返回作为参数给出的序列的笛卡尔积。

答案 2 :(得分:0)

尝试这个:

import pandas as pd
import numpy as np

sexes=["m", "f"]
ages=["young", "middle", "old"]
destination_codes=["123", "039", "0230", "0249"]
origin_codes=["304", "0430", "034i39", "430", "0349"]
combined_ = np.array([[a,b,c,d] for a in sexes for b in ages for c in destination_codes for d in origin_codes])

df=pd.DataFrame(data={"sexes": combined_[:,0], "ages": combined_[:,1], "destination": combined_[:,2], "origin": combined_[:,3]})

相关问题