根据列值重复数据框的行

时间:2018-10-17 17:54:32

标签: python pandas

我有一个像这样的数据框:

df1 = pd.DataFrame({'a': [1,2],
                    'b': [3,4],
                    'c': [6,5]})
  df1
Out[150]: 
   a  b  c
0  1  3  6
1  2  4  5

现在,我想创建一个基于col b和c加1的差重复每行的df。所以第一行的b和c之间的差是6-3 =3。我想重复3 + 1 = 4次。同样,对于第二行,差异为5-4 = 1,因此我想将其重复1 + 1 = 2次。列d被添加为具有从min(b)到b和c之间的差异的值(即6-3 =3。因此它从3-> 6变为)。所以我想得到这个df:

  a  b  c d
0 1  3  6 3
0 1  3  6 4
0 1  3  6 5
0 1  3  6 6
1 2  4  5 4
1 2  4  5 5

1 个答案:

答案 0 :(得分:1)

使用reindex + repeat进行操作,然后使用groupby cumcount分配新值d

df1.reindex(df1.index.repeat(df1.eval('c-b').add(1))).\
      assign(d=lambda x : x.c-x.groupby('a').cumcount(ascending=False))
Out[572]: 
   a  b  c  d
0  1  3  6  3
0  1  3  6  4
0  1  3  6  5
0  1  3  6  6
1  2  4  5  4
1  2  4  5  5