Абсолютное значение Python в списке, вложенном в фрейм данных - PullRequest
1 голос
/ 23 сентября 2019

У меня есть такой фрейм данных:

Current Dataframe:

   ID       Price   Price_List
0  Prodt1   1500    [-5.2, -4.6, -3.3, 0]
1  Prodt2   17      [-9.2, -8.4, -2.1, 0]

, и я хотел бы применить абсолютное значение к списку в Price_List (кроме нулевого значения) и добавить его обратно к себе, а затем отсортироватьЭто.Получившийся столбец будет выглядеть следующим образом:

Desired Dataframe:

   ID       Price   Price_List               New_Col
0  Prodt1   1500    [-5.2, -4.6, -3.3, 0]    [-5.2, -4.6, -3.3, 0, 3.3, 4.6, 5.2]
1  Prodt2   17      [-9.2, -8.4, -2.1, 0]    [-9.2, -8.4, -2.1, 0, 2.1, 8.4, 9.2]

Любая помощь очень, очень ценится!

Ответы [ 3 ]

3 голосов
/ 23 сентября 2019

Вы можете использовать понимание списка, чтобы перебирать списки в Price_List и расширять каждый список абсолютными значениями всех элементов, кроме 0, с помощью условного выражения (обратите внимание, что if j достаточно, поскольку выражение будет вычислятьFalse только когда j равно 0):

df['New_Col'] = sorted(i + [abs(j) for j in i if j] for i in df.Price_List)

print(df)

     ID    Price         Price_List                    New_Col
0  Prodt1   1500  [-5.2, -4.6, -3.3, 0]  [-5.2, -4.6, -3.3, 0, 3.3, 4.6, 5.2]
1  Prodt2     17  [-9.2, -8.4, -2.1, 0]  [-9.2, -8.4, -2.1, 0, 2.1, 8.4, 9.2]
1 голос
/ 23 сентября 2019

Series.map и с np.abs, np.trim_zeros также работают

df['New_Col'] = df.Price_List.map(lambda x: sorted(x + 
                                      np.trim_zeros(np.abs(x)).tolist()))

Out[249]:
       ID  Price             Price_List                               New_Col
0  Prodt1   1500  [-5.2, -4.6, -3.3, 0]  [-5.2, -4.6, -3.3, 0, 3.3, 4.6, 5.2]
1  Prodt2     17  [-9.2, -8.4, -2.1, 0]  [-9.2, -8.4, -2.1, 0, 2.1, 8.4, 9.2]
1 голос
/ 23 сентября 2019

Вы можете использовать apply, если фрейм данных не слишком велик, чтобы добавить список со списком, который использует abs

df['New_Col'] = df.Price_List.apply(lambda x: sorted(x + [abs(xx) for xx in x if x]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...