我有一个像这样的数据框:
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中有办法吗?
谢谢!
答案 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