В моем примере данные:
df= pd.DataFrame({'name': {0: 'x',
1: 'x',
2: 'x',
3: 'y'},
'time_cost': {0: '28800000, 250',
1: '39600000, 300',
2: '61200000, 250',
3: '72000000, 0'}})
Шаг 1. Вы можете использовать что-то вроде этого, чтобы получить результат:
def split_function(n):
return n.split(',')
df['time_cost'] = df.time_cost.apply(split_function)
Выход:
name time_cost
0 x [28800000, 250]
1 x [39600000, 300]
2 x [61200000, 250]
3 y [72000000, 0]
Шаг 2. Если вам нужны два разных столбца в вашем DataFrame, вы можете использовать:
df.time_cost.apply(pd.Series)
Выход:
0 1
0 28800000 250
1 39600000 300
2 61200000 250
3 72000000 0
Шаг 3. А затем присоединитесь к ним:
df = df.join(df.time_cost.apply(pd.Series))
Вывод:
name time_cost 0 1
0 x [28800000, 250] 28800000 250
1 x [39600000, 300] 39600000 300
2 x [61200000, 250] 61200000 250
3 y [72000000, 0] 72000000 0
И затем вы можете использовать drop
для удаления столбца "time_cost" и rename
для переименования новых столбцов, если хотите.
Это то, что вы хотите? Я надеюсь, что это будет полезно.
UPD:
Шаг 4. Если вы хотите сгруппировать по имени, вы можете использовать это:
df[0] = df[0].astype(int)
df[1] = df[1].astype(int)
def concat_function_0(df):
return np.array(df[0])
def concat_function_1(df):
return np.array(df[1])
df = pd.DataFrame([df.groupby('name').apply(concat_function_1), df.groupby('name').apply(concat_function_0)]).T
Это не питон, но работает =)
Выход:
name 0 1
x [250, 300, 250] [28800000, 39600000, 61200000]
y [0] [72000000]
UPD:
Шаг 5. Для вашего результата после первого шага используйте:
def df_to_array(df):
return list(df.time_cost)
result = df.groupby('name').apply(df_to_array).values
Выход:
[[['28800000', ' 250'], ['39600000', ' 300'], ['61200000', ' 250']]
[['72000000', ' 0']]]