如何基于df值创建新的数据框行

时间:2019-10-09 21:27:36

标签: python pandas dataframe

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

index buyedA total
a      2    4
b      1    2

我需要将其变成这样:

index buyedA total
a      1    1
a      1    1
a      0    1
a      0    1
b      1    1
b      0    1

我需要为每个 index total 所指定的(每个填充的值为1),如果 buyedA 列说2,我需要其中的2行填充1。

在Python中有办法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用repeat和简单的groupby

n = df.loc[df.index.repeat(df.total)].assign(total=1)
n['buyedA'] = n.groupby('index').total.cumsum().le(n.buyedA).astype(int)

  index  buyedA  total
0     a       1      1
0     a       1      1
0     a       0      1
0     a       0      1
1     b       1      1
1     b       0      1

答案 1 :(得分:1)

让我们尝试一下:

#make sure index is in the dataframe index
df=df.set_index('index')

#use repeat and reindex
df_out = df.reindex(df.index.repeat(df['total'])).assign(total=1)

#Limit buyedA by row number in each group of index
df_out['buyedA'] = ((df_out.groupby('index').cumcount() + 1) <= df_out['buyedA']).mul(1)

df_out

输出:

       buyedA  total
index               
a           1      1
a           1      1
a           0      1
a           0      1
b           1      1
b           0      1