Python 根据其他两列的值,以n次重复一行

Python 根据其他两列的值,以n次重复一行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,有4列,a、B、C、D: A B C D 1 0 2 ["apple", "pear", "peach"] 2 2 3 ["cherry"] 3 3 3 ["banana", "cherry"] 4 4 7 [] 5 1 3 ["apple", "grape

我有一个熊猫数据框,有4列,a、B、C、D:

A   B   C   D
1   0   2   ["apple", "pear", "peach"]
2   2   3   ["cherry"]
3   3   3   ["banana", "cherry"]
4   4   7   []
5   1   3   ["apple", "grapes"]
我希望通过将每行重复n次得到以下结果,其中n等于的值(C列-B列),并使用更新后的值(每次重复+1)更新B列中的值

不确定我怎么能做到这一点?谢谢

编辑 列D对于每个B值可能不是唯一的,因此分组方式在此处可能不起作用。

与以下选项一起使用:


您可以执行index.repeat和groupby.cumcount

import pandas as pd
c = ['A','B','C','D']
d = [[1,   0,   2,   ["apple", "pear", "peach"]],
     [2,   2,   3,   ["cherry"]],
     [3,   3,   3,   ["banana", "cherry"]],
     [4,   4,   7,   []],
     [5,   1,   3,   ["apple", "grapes"]]]
df = pd.DataFrame(d,columns=c)
df = df.loc[df.index.repeat(df['C']-df['B']+1)]
df['B'] = df['B']+df.groupby(['A']).cumcount()
print (df)
输出为:

   A  B  C                     D
0  1  0  2  [apple, pear, peach]
0  1  1  2  [apple, pear, peach]
0  1  2  2  [apple, pear, peach]
1  2  2  3              [cherry]
1  2  3  3              [cherry]
2  3  3  3      [banana, cherry]
3  4  4  7                    []
3  4  5  7                    []
3  4  6  7                    []
3  4  7  7                    []
4  5  1  3       [apple, grapes]
4  5  2  3       [apple, grapes]
4  5  3  3       [apple, grapes]
有关更多详细信息,请参阅stackoverflow帖子:


谢谢@Mayank Porwal的回答,但我应该用一个更好的例子来澄清,D列对于每个B值可能不是唯一的。所以groupby可能不起作用。
import pandas as pd
c = ['A','B','C','D']
d = [[1,   0,   2,   ["apple", "pear", "peach"]],
     [2,   2,   3,   ["cherry"]],
     [3,   3,   3,   ["banana", "cherry"]],
     [4,   4,   7,   []],
     [5,   1,   3,   ["apple", "grapes"]]]
df = pd.DataFrame(d,columns=c)
df = df.loc[df.index.repeat(df['C']-df['B']+1)]
df['B'] = df['B']+df.groupby(['A']).cumcount()
print (df)
   A  B  C                     D
0  1  0  2  [apple, pear, peach]
0  1  1  2  [apple, pear, peach]
0  1  2  2  [apple, pear, peach]
1  2  2  3              [cherry]
1  2  3  3              [cherry]
2  3  3  3      [banana, cherry]
3  4  4  7                    []
3  4  5  7                    []
3  4  6  7                    []
3  4  7  7                    []
4  5  1  3       [apple, grapes]
4  5  2  3       [apple, grapes]
4  5  3  3       [apple, grapes]