我正在从DataFrame创建一个“实验设计”矩阵,该矩阵表示每个元素的可能选择。
我想为DataFrame中每个元素的唯一组合创建一列,该列代表一个实验集。
约束:元素的大小不尽相同。
输入:
index Column1 Column2 Column3
a a1
b b1 b2 b3
c c1 c2
d d1
所需的输出: index列1列2列3列4列5列6
a a1 a1 a1 a1 a1 a1
b b1 b2 b3 b1 b2 b3
c c1 c1 c1 c2 c2 c2
d d1 d1 d1 d1 d1 d1
我看过压缩列表,但希望找到一种优雅的方式。
答案 0 :(得分:0)
也许有一些itertools动作? :-)
idx = ['a','b','c','d']
df = pd.DataFrame([['a1',None,None],['b1','b2','b3'],['c1','c2',None],['d1',None,None]],
index=idx,
columns=['Column1','Column2','Column3'])
NUM_OF_COLUMNS = 6
result = []
for r in df.values:
#Filter None or other types of "emtpy" values you have:
filtered = [x for x in r if x is not None]
# Creat a row by repeating the elements:
rep_list = list(islice(cycle(filtered), NUM_OF_COLUMNS))
result.append(rep_list)
res_df = pd.DataFrame(result,
index=idx,
columns=['Column'+str(i) for i in range(1, NUM_OF_COLUMNS+1)])