Pandas如何复制行并添加列?

3
我有一个带有数百个行的pandas df,看起来像这样:
``` html
ID value
IDx12 6
IDx15 12
```
我想复制这些行2次,每次增加 value 列,并为新创建的每一行添加名为 ratio 的列。以下是我要为创建的行设置的 ratio 值:
- 原始行 = 0 - 第一次重复 = 0.25 - 第二次重复= 0.5
因此输出结果应如下所示:
``` html
ID value ratio
IDx12 6 0
IDx12 7 0.25
IDx12 8 0.5
IDx15 12 0
IDx15 13 0.25
IDx15 14 0.5
```
我发现一种非常愚蠢的方法是通过复制df,手动增加 value ,添加带有 ratio 的列,然后连接所有dfs。但这样非常低效。你有没有更聪明的方法呢?谢谢您的帮助。

也许可以在行上应用lambda函数,并根据您的条件插入新行。 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html - Eternal E'lir
1个回答

2
以下是针对此问题的矢量化方法。
创建一个具有重复行的数据帧。
rdf = pd.DataFrame(np.repeat(df.values, 3, axis=0), columns=df.columns)

创建一个列来保存重复次数。
rdf['repeat'] = 1
rdf['repeat'] = rdf.groupby('ID').repeat.cumsum() - 1

将 repeat 添加到值中

rdf['value'] += rdf['repeat']

创建比率列。
rdf['ratio'] = rdf.repeat * 0.25

看这里!输出结果为:

      ID value  repeat  ratio
0  IDx12     6       0   0.00
1  IDx12     7       1   0.25
2  IDx12     8       2   0.50
3  IDx15    12       0   0.00
4  IDx15    13       1   0.25
5  IDx15    14       2   0.50

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接