我有一个由下面的脚本生成的数据框-引入了数据框“ 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 |
|------|---------|
答案 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))