如何根据多个列表的每个唯一组合创建 pandas 数据框?
How can I create a pandas data frame from each unique combination of multiple lists?
我正在尝试根据四个不同长度列表的每个唯一组合创建一个 pandas 数据框。我是一个相对初学者。
我构建了一个嵌套组合列表,如下所示:
combinations = [
[
[
[
[w,x,y,z]for w in sexes
]
for x in ages
]
for y in destination_codes
]
for z in origin_codes
]
其中每个都是一个简单的列表。这工作正常,但我不知道如何将其放入四列框架中,每个唯一组合各占一行,如下所示:
我试过这个:
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)
根本不起作用。
任何指示都会非常有帮助 - 我不确定这是一个简单的错误还是我以错误的方式解决了整个问题。有什么想法吗?
使用itertools.product
。它 returns 作为参数给出的序列的笛卡尔积。
这是否符合您的要求?
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))
试试这个:
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]})
我正在尝试根据四个不同长度列表的每个唯一组合创建一个 pandas 数据框。我是一个相对初学者。
我构建了一个嵌套组合列表,如下所示:
combinations = [
[
[
[
[w,x,y,z]for w in sexes
]
for x in ages
]
for y in destination_codes
]
for z in origin_codes
]
其中每个都是一个简单的列表。这工作正常,但我不知道如何将其放入四列框架中,每个唯一组合各占一行,如下所示:
我试过这个:
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)
根本不起作用。
任何指示都会非常有帮助 - 我不确定这是一个简单的错误还是我以错误的方式解决了整个问题。有什么想法吗?
使用itertools.product
。它 returns 作为参数给出的序列的笛卡尔积。
这是否符合您的要求?
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))
试试这个:
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]})