#python #pandas #apply
#python #pandas #применить
Вопрос:
У меня есть набор данных следующим образом
data = { "C1": [1.0 , 1.2 , 1.2, 1.30 , 1.29 , 1.30, 1.31] ,
"C2" :[1.2 , 1.3 , 1.3 , 1.40 , 1.50 , 1.60 , 1.61] ,
"C3": [1.3 , 1.0 , 1.2 , 1.21 , 1.31 , 1.42 , 1.33] }
data = pd.DataFrame(data)
data = data.T
print(data)
0 1 2 3 4 5 6
Cell 1 1.0 1.2 1.2 1.30 1.29 1.30 1.31
Cell 2 1.2 1.3 1.3 1.40 1.50 1.60 1.61
Cell 3 1.3 1.0 1.2 1.21 1.31 1.42 1.33
У меня есть функция, которая находит неубывающие последовательности в списке чисел. Например, если вы рассматриваете первую строку, которая
[1.0 , 1.2 , 1.2, 1.30 , 1.29 , 1.30, 1.31]
есть две неубывающие последовательности:
1- [1.0 , 1.2 , 1.2, 1.30] and 2- [1.29 , 1.30, 1.31]
Я использую следующую функцию для получения этих неубывающих последовательностей:
def igroups(x):
s = [0] [i for i in range(1, len(x)) if x[i] < x[i-1]] [len(x)]
#print(s)
return [x[j:k] for j, k in [s[i:i 2] for i in range(len(s)-1)] if k - j > 1]
Мой вопрос: я хочу apply
работать igroups
со всеми строками моего фрейма данных. Как я могу это сделать?
Я попытался решить эту проблему, используя apply
, например
dt.applymap(lambda x : igroups(x))
Я знаю apply
, что функция работает с ячейками, а не со строкой, и причина, по которой последняя строка кода не работает, связана с этим, я также знаю, что я могу решить эту проблему с помощью циклов (чего я предпочитаю не делать).
Представляющим интерес результатом будет нечто такое, что появится новый столбец (new), содержащий список неубывающих последовательностей чисел:
0 1 2 3 4 5 6 7 new
Cell 1 1.0 1.2 1.2 1.30 1.29 1.30 1.31 [[1.0 , 1.2 , 1.2, 1.30 ], [1.29 , 1.30, 1.31]]
Cell 2 1.2 1.3 1.3 1.40 1.50 1.60 1.61 [[1.2 , 1.3 , 1.3 , 1.40 , 1.50 , 1.60 , 1.61]]
Cell 3 1.3 1.0 1.2 1.21 1.31 1.42 1.33 [[1.0 , 1.2 , 1.21 , 1.31 , 1.42]]
Ответ №1:
Используйте pandas apply с axis = 1 . Он применит функцию к каждой строке и вернет ряд.
df['new'] = df.apply(igroups, axis = 1)