为DataFrame中的元素创建组合集

时间:2019-06-23 14:23:57

标签: python python-3.x

我正在从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

我看过压缩列表,但希望找到一种优雅的方式。

1 个答案:

答案 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'])

enter image description here

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)])

enter image description here

相关问题