如何将包含总人口列和总成功列的一行转换为成功和失败的多行?

时间:2019-07-12 00:26:41

标签: python pandas

我设置了一个大型数据框,其中包含ID,TotalPopulation和TotalSuccesses。我需要将其转换为每个ID多行,每个ID的总行数=该ID的TotalPopulation。然后,我需要附加“成功”列1或0,并根据TotalSuccesses列分配正确的成功值数。

这是一个小例子:

import pandas as pd 

df = pd.DataFrame([['A', 3, 1], 
                   ['B', 5, 2], 
                   ['C', 4, 2]], 
                  columns = ['ID', 'TotalPopulation', 'TotalSuccesses'])

desired_df = pd.DataFrame([['A', 1], 
                           ['A', 0], 
                           ['A', 0], 
                           ['B', 1], 
                           ['B', 1],
                           ['B', 0],
                           ['B', 0],
                           ['B', 0],
                           ['C', 1],
                           ['C', 1],
                           ['C', 0],
                           ['C', 0],], 
                        columns = ['ID', 'Success'])

df
Out[20]: 
  ID  TotalPopulation  TotalSuccesses
0  A                3               1
1  B                5               2
2  C                4               2

desired_df
Out[21]: 
   ID  Success
0   A        1
1   A        0
2   A        0
3   B        1
4   B        1
5   B        0
6   B        0
7   B        0
8   C        1
9   C        1
10  C        0
11  C        0

我试图通过以下方法扩展数据集,但是由于数据集的大小,我不确定它是否会完成运行。之后,我找不到分配正确数量的“成功”的好方法。因此,如果需要执行此操作以使其重复,我仍然需要一些帮助来弄清楚如何分配这些“成功”

df2 = pd.DataFrame([df.ix[idx] 
                       for idx in df.index 
                       for _ in range(int(df.ix[idx]['TotalPopulation']))]).reset_index(drop=True)

任何指导表示赞赏!

0 个答案:

没有答案