Python 根据其他两列的值,以n次重复一行
我有一个熊猫数据框,有4列,a、B、C、D: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
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]