如何根据数据框值生成新的 Python 数据框系列
How to generate new Python dataframe series based on dataframe values
我有一个由下面的脚本生成的数据框 - 引入数据框 "data"。
理想情况下,我想生成一个结合了 id 和 1 : 值序列的新数据框。
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 |
|------|---------|
使用Index.repeat
by column value
and reassign values by counter by 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))
我有一个由下面的脚本生成的数据框 - 引入数据框 "data"。
理想情况下,我想生成一个结合了 id 和 1 : 值序列的新数据框。
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 |
|------|---------|
使用Index.repeat
by column value
and reassign values by counter by 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))