我有一个像这样的DataFrame:

  column1  column2  column3
0       a        2        2
1       b        1        0
2       c        3        2


如果column3中的值必须
我想根据以下规则将df扩展到下面:

  column1  column2  column3
0       a        1        1
1       a        1        1
2       b        1        0
3       c        1        1
4       c        1        1
5       c        1        0



每行都被扩展为与column2中的值相等的行数
如果扩展行的column3的索引(相对于column1分组的索引)小于column3中原始未扩展行的值,则column3的值等于1。


例如:
看到column1 = a的行被扩展为2行,因为它的column2值等于2,并且由于0
看到column1 = c的行被扩展为3行,因为它的column2值等于3,但是,只有前2个结果扩展行在column3中的值为1(再次:0
我可以在第一个给出的数据帧上使用什么函数来获得看起来像第二个的结果?

最佳答案

np.repeat + cumcount

u = pd.DataFrame(np.repeat(df.values, df.column2, axis=0), columns=df.columns)

u.assign(
  column2=1,
  column3=(u.column3 > u.groupby('column1').cumcount()).astype(int)
)




  column1  column2  column3
0       a        1        1
1       a        1        1
2       b        1        0
3       c        1        1
4       c        1        1
5       c        1        0

09-25 21:41