Я хотел бы преобразовать столбец duration
в столбцы start
и end
. Я пробую приведенный ниже код, он работает так, как ожидалось, но это не идеальный способ.
import pandas as pd
def main():
data = [
['A',7],
['B',5],
['C',5],
['D',15],
['E',5]
]
df = pd.DataFrame(data,columns=['name','duration'])
data = []
for idx,row in df.iterrows():
name = row['name']
dur = row['duration']
if idx == 0:
start = 0
end = start + dur
else:
start = end
end = start + dur
data.append([name,start,dur,end])
df = pd.DataFrame(data,columns=['name','start','duration','end'])
print(df)
main()
Исключенные результаты:
name start duration end
0 A 0 7 7
1 B 7 5 12
2 C 12 5 17
3 D 17 15 32
4 E 32 5 37
Возможное решение, которое использует совокупную сумму для вычисления столбца end
и, следовательно, вычисляет столбец start
как разницу между столбцами end
и duration
:
cols = ['name', 'start', 'duration', 'end']
d = df.assign(end = df['duration'].cumsum())
d.assign(start = d['end'] - d['duration'])[cols]
Выход:
name start duration end
0 A 0 7 7
1 B 7 5 12
2 C 12 5 17
3 D 17 15 32
4 E 32 5 37
Просто используйте cumsum, чтобы получить промежуточную сумму, и вычтите ее из продолжительности, чтобы получить начало.
df['end'] = df['duration'].cumsum()
df['start'] = df['end'] - df['duration']
Просто используйте cumsum, чтобы получить промежуточную сумму, и вычтите ее из продолжительности, чтобы получить начало. df['end'] = df['duration'].cumsum() df['start'] = df['end'] - df['duration']