我正在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的方式进行。另外,我认为我编写的代码无法推广到更多列表。
我正在寻找帮助,至少需要一些阅读材料的指导,这些材料可以帮助我实现上面介绍的内容。
谢谢!
你可以做这样的事情。查看每一列,计算出组合,然后输出列表:
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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句