我正在python 3.6中进行个人项目。我使用熊猫从数据框中的excel文件导入数据,然后将数据提取到几个列表中。
现在,我将举一个例子来确切说明我要实现的目标。 因此,我假设有3个输入列表a,b和c(我确实在列表中插入了索引和一些额外的空格,因此更容易理解):
0 1 2 3 4 5 6
a=[1, 5, 6, [10,12,13], 1, [5,3] ,7]
b=[3, [1,2], 3, [5,6], [1,3], [5,6], 9]
c=[1, 0 , 4, [1,2], 2 , 8 , 9]
当列表之一中包含多个元素的列表时,我试图组合数据以获取所有组合。所以输出需要像这样:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
a=[1, 5, 5, 6, 10,10,10, 10, 12, 12, 12, 12, 13, 13, 13, 13, 1, 1, 5, 5, 3, 3, 7]
b=[3, 1, 2, 3, 5, 5, 6, 6, 5, 5, 6, 6, 5, 5, 6, 6, 1, 3, 5, 6, 5, 6, 9]
c=[1, 0, 0, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 8, 8, 8, 8, 9]
要使其更加清楚:
从原始列表来看,如果我们看一下索引1元素: a [1] = 5,b [1] = [1,2],c [1] = 0。它们在1和2索引位置上转换为以下值:a [1:3] = [5,5]; b [1:3] = [1,2]; c [1:3] = [0,0]
这还需要应用于原始输入列表中的索引3、4和5,以获得与上述示例输出类似的内容。
我希望能够将其推广到更多列表(a,b,c ..... n)。我已经能够针对两个列表执行此操作,但是以一种完全不雅致,绝对不是pythonic的方式进行。另外,我认为我编写的代码无法推广到更多列表。
我正在寻找帮助,至少是一些阅读材料的指南,这些材料可以帮助我实现上面介绍的内容。
谢谢!
答案 0 :(得分:1)
您可以执行以下操作。 查看每一列,计算出组合,然后输出列表:
import pandas as pd
import numpy
a=[1, 5, 6, [10,12,13], 1, [5,3] ,7]
b=[3, [1,2], 3, [5,6], [1,3], [5,6], 9]
c=[1, 0 , 4, [1,2], 2 , 8 , 9]
df = pd.DataFrame([a,b,c])
final_df = pd.DataFrame()
i=0
for col in df.columns:
temp_df = pd.DataFrame(df[col])
get_combo = []
for idx, row in temp_df.iterrows():
get_combo.append([row[i]])
combo_list = [list(x) for x in numpy.array(numpy.meshgrid(*get_combo)).T.reshape(-1,len(get_combo))]
temp_df_alpha = pd.DataFrame(combo_list).T
i+=1
if len(final_df) == 0:
final_df = temp_df_alpha
else:
final_df = pd.concat([final_df, temp_df_alpha], axis=1, sort=False)
for idx, row in final_df.iterrows():
print (row.tolist())
输出:
[1, 5, 5, 6, 10, 10, 12, 12, 13, 13, 10, 10, 12, 12, 13, 13, 1, 1, 5, 5, 3, 3, 7]
[3, 1, 2, 3, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 1, 3, 5, 6, 5, 6, 9]
[1, 0, 0, 4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 9]