Присвоить новому столбцу значение из списка в другом столбце
Имею df:
lastUpdateId bids asks
0 1311508485 [1.66200000, 2249.05000000] [1.66300000, 1020.40000000]
1 1311508485 [1.66100000, 4713.99000000] [1.66400000, 6024.12000000]
2 1311508485 [1.66000000, 10568.12000000] [1.66500000, 34493.35000000]
3 1311508485 [1.65900000, 18546.99000000] [1.66600000, 18836.93000000]
4 1311508485 [1.65800000, 32589.85000000] [1.66700000, 7370.94000000]
Как присвоить новому столбцу, к примеру 'b_p', значение из списка столбца 'bids'? Чтобы получилось:
lastUpdateId bids asks b_p
0 1311508485 [1.66200000, 2249.05000000] [1.66300000, 1020.40000000] 1.66200000
1 1311508485 [1.66100000, 4713.99000000] [1.66400000, 6024.12000000] 1.66200000
2 1311508485 [1.66000000, 10568.12000000] [1.66500000, 34493.35000000] 1.66200000
3 1311508485 [1.65900000, 18546.99000000] [1.66600000, 18836.93000000] 1.66200000
4 1311508485 [1.65800000, 32589.85000000] [1.66700000, 7370.94000000] 1.66200000
Реализовал через цикл:
for i in range(len(a['lastUpdateId'].tolist())):
a.loc[i, 'b_p'] = float(a.bids[i][0])
Но мне кажется можно реализовать это быстрее:)
Заранее спасибо!
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
не просто можно, а нужно. к спискам в значениях можно обратиться через модификатор str:
df["b_p"] = df["bids"].str[0]
print(df)
lastUpdateId bids asks b_p
0 1311508485 [1.662, 2249.05] [1.663, 1020.4] 1.662
1 1311508485 [1.661, 4713.99] [1.664, 6024.12] 1.661
2 1311508485 [1.66, 10568.12] [1.665, 34493.35] 1.660
3 1311508485 [1.659, 18546.99] [1.666, 18836.93] 1.659
4 1311508485 [1.658, 32589.85] [1.667, 7370.94] 1.658
Ну и тип данных остался таким, какой нужен:
print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 lastUpdateId 5 non-null int64
1 bids 5 non-null object
2 asks 5 non-null object
3 b_p 5 non-null float64
dtypes: float64(1), int64(1), object(2)