Используя pandas 0.25.1+, вы можете использовать explode
:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Quantity':[6,50,25,4]
,'Column in question':['1;2;3;4;5;6','','','7;8;9;10']
,'Price':['$1.00','$10.00','$0.10','$25.00']
,'Invoice Close Date':['9/3/2019','9/27/2019','9/18/2019','9/30/2019']})
df_out = df.assign(ciq=df['Column in question'].str.split(';')).explode('ciq')\
.drop('Column in question', axis=1)\
.rename(columns={'ciq':'Column in question'})
df_out['Quantity'] = (df_out['Quantity'] / df_out.groupby(level=0)['Quantity'].transform('size'))
df_out
Вывод:
Quantity Price Invoice Close Date Column in question
0 1.0 $1.00 9/3/2019 1
0 1.0 $1.00 9/3/2019 2
0 1.0 $1.00 9/3/2019 3
0 1.0 $1.00 9/3/2019 4
0 1.0 $1.00 9/3/2019 5
0 1.0 $1.00 9/3/2019 6
1 50.0 $10.00 9/27/2019
2 25.0 $0.10 9/18/2019
3 1.0 $25.00 9/30/2019 7
3 1.0 $25.00 9/30/2019 8
3 1.0 $25.00 9/30/2019 9
3 1.0 $25.00 9/30/2019 10
Подробности:
Сначала создайте столбец, содержащийсписок с использованием str.split
и assign
. Затем используйте explode
, затем rename
новый столбец со старым именем после drop
.