【发布时间】:2025-11-28 09:40:01
【问题描述】:
我正在努力解决这个问题。
让我们假设一个如下所示的数据框:
df = pd.DataFrame({'col0':['string1', 'string2'],
'col1':['some string','another string'],
'start':[100,1],
'end':[107,5]})
col0 col1 start end
0 string1 some string 100 107
1 string2 another string 1 5
目标是找到start 和end 之间的差异,然后将那么多行添加到我的数据框中,ffill 其余列,并为start 和end。预期输出如下:
df2 = pd.DataFrame({'col0':['string1']*8,
'col1':['some string']*8,
'new_col':[x for x in range(100,108)]})
df3 = pd.DataFrame({'col0':['string2']*5,
'col1':['another string']*5,
'new_col':[x for x in range(1,6)]})
output = pd.concat([df2,df3]).reset_index(drop=True)
col0 col1 new_col
0 string1 some string 100
1 string1 some string 101
2 string1 some string 102
3 string1 some string 103
4 string1 some string 104
5 string1 some string 105
6 string1 some string 106
7 string1 some string 107
8 string2 another string 1
9 string2 another string 2
10 string2 another string 3
11 string2 another string 4
12 string2 another string 5
我的第一个想法是创建一个新的数据框...类似于:
vals = list(zip(df['start'], df['end']+1))
pd.concat([pd.DataFrame([i], columns=['new_col']) for val in vals for i in range(*val)])
但这似乎效率很低,我正在努力添加剩余的数据。
【问题讨论】:
标签: python python-3.x pandas