Присвоить новому столбцу значение из списка в другом столбце

Имею 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)
→ Ссылка