如何基于数据框值生成新的Python数据框系列

时间:2019-07-17 11:51:56

标签: python pandas dataframe series

我有一个由下面的脚本生成的数据框-引入了数据框“ data”。

理想情况下,我想生成一个结合了id和1:value序列的新数据框。

d = {'id': ['a', 'b','c'], 'value': [1, 2,1]}
data = pd.DataFrame(data=d)
data

这意味着理想的输出将是:

|------|---------|
|  ID  |  value  |
|------|---------|
|   a  |  1      |
|   b  |  1      |
|   b  |  2      |
|   c  |  1      |
|------|---------|

1 个答案:

答案 0 :(得分:2)

在列value中使用Index.repeat,并在计数器中通过GroupBy.cumcount重新分配值:

#if not default RangeIndex
#data = data.reset_index(drop=True)
df = data.loc[data.index.repeat(data['value'])]
df['value'] = df.groupby(level=0).cumcount() + 1
df = df.reset_index(drop=True)
print (df)
  id  value
0  a      1
1  b      1
2  b      2
3  c      1

使用DataFrame.assign的替代解决方案:

df = (data.loc[data.index.repeat(data['value'])]
          .assign(value=lambda x: x.groupby(level=0).cumcount() + 1)
          .reset_index(drop=True))