我之前曾问过类似的问题,但我正在寻找不同的输出。
Create a dataframe of permutations in pandas from list
我的清单如下:
aa = ['aa1', 'aa2', 'aa3', 'aa4', 'aa5']
bb = ['bb1', 'bb2', 'bb3', 'bb4', 'bb5']
cc = ['cc1', 'cc2', 'cc3', 'cc4', 'cc5']
现在我想创建一个数据帧,如下所示:
aa bb cc
aa1 bb1 cc1
aa2 bb1 cc1
aa3 bb1 cc1
aa4 bb1 cc1
aa5 bb1 cc1
aa1 bb2 cc1
aa1 bb3 cc1
aa1 bb4 cc1
aa1 bb5 cc1
aa1 bb1 cc2
aa1 bb1 cc3
aa1 bb1 cc4
aa1 bb1 cc5
我之前收到的建议是使用:
lists = [aa, bb, cc]
pd.DataFrame(list(itertools.product(*lists)), columns=['aa', 'bb', 'cc'])
这给了我一个笛卡尔积。
但这一次,它并不是我所寻找的。 我希望输出与上面的示例输出完全一样。 - 因此列表中的每个元素只在每列中出现一次,但第一个元素除外,它是重复的,用于填充整个列。
感谢任何帮助!
答案 0 :(得分:1)
首先构建重复部分:
index = pd.RangeIndex(len(aa) + len(bb) + len(cc))
df = pd.DataFrame({'aa':aa[0], 'bb':bb[0], 'cc':cc[0]}, index)
这给你15份副本:
aa1 bb1 cc1
然后覆盖不同的部分:
df.aa[:len(aa)] = aa
df.bb[len(aa):len(aa)+len(bb)] = bb
df.cc[len(aa)+len(bb):] = cc
提供所需的输出。