python - 如何根据列定义的起始值和结束值创建数据框的行序列
问题描述
我有以下数据框:
example_df = pd.DataFrame({'id': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4},
'seq_start': {0: 0.0, 1: 2800.0, 2: 6400.0, 3: 8400.0, 4: 9800.0},
'seq_end': {0: 1400.0, 1: 4700.0, 2: 8400.0, 3: 9800.0, 4: 11400.0}})
我想获得一个数据框,其中包含从example_df['seq_start']
to的值序列,example_df['seq_end']
以便以后可以在连接中使用新创建的列。
所以预期的输出如下所示:
out_df = pd.DataFrame({'id': np.concatenate([[0] * 15, [1] * 20, [2] * 21]),
'expected_output': np.concatenate([np.arange(0, 1500, 100),
np.arange(2800, 4800, 100),
np.arange(6400, 8500, 100)])})
id expected_output
0 0 0
1 0 100
2 0 200
3 0 300
4 0 400
5 0 500
...
12 0 1200
13 0 1300
14 0 1400
15 1 2800
16 1 2900
17 1 3000
...
31 1 4400
32 1 4500
33 1 4600
34 1 4700
35 2 6400
36 2 6500
37 2 6600
...
54 2 8300
55 2 8400
我该如何处理?
解决方案
使用pandas.DataFrame.explode
:
def listify(x, step=100, right_closed=True):
lower, upper = sorted(x)
return range(lower, upper+step*right_closed, step)
example_df['expected'] = example_df[['seq_end', 'seq_start']].astype(int).apply(listify, 1)
new_df = example_df[['id','expected']].explode('expected')
print(new_df)
输出:
id expected
0 0 0
0 0 100
0 0 200
0 0 300
0 0 400
.. .. ...
4 4 11000
4 4 11100
4 4 11200
4 4 11300
4 4 11400
推荐阅读
- python - geopandas 无法识别多边形中的点
- unix - scp远程文件到hadoop而不将它复制到边缘节点
- python - 如何从单元测试 django 视图中模拟模型方法?
- powershell - 如何使用 PowerShell 将有关监视器的信息导出到 csv 文件?
- c++ - 如何更改另一个进程中的地址,其值也可以更改?
- r - 如何使用 dplyr 或 ggplot 绘制连续参数的中值?
- php - Yii2在dataProvider中添加自定义查询,无需多次重写查询
- python - 从行和列索引创建数据框
- r - 使用R中的if语句逐行比较csv
- ios - 具有 3D 效果的 iOS 雷达图