У меня есть набор данных следующим образом:
data = {"C1": [0.98, 1.10], "C2": [1.25, 0.99],
"C3": [1.3, 1.41], "C4": [1.00, .99] }
data = pd.DataFrame(data)
C1 C2 C3 C4
0 0.98 1.25 1.30 1.00
1 1.10 0.99 1.41 0.99
Я хочу иметь новый столбец, который представляет собой list
всех чисел в одной строке. Таким образом, мой желаемый результат будет следующим:
C1 C2 C3 C4 New_Column
0 0.98 1.25 1.30 1.00 [0.98, 1.25, 1.30, 1.00]
1 1.10 0.99 1.41 0.99 [1.10, 0.99, 1.41, 0.99]
Я уже разработал следующий код:
data["New_Column"] = np.nan
def create_list_of_numbers(data):
for i in range(len(data)-1):
print(data.iloc[i,:4].values) # Gives the list of values of first four columns
data.iloc[i,dt.columns.get_loc("New_Column")] = data.iloc[i,:4].values
return data
Я получаю следующую ошибку: «ValueError: установка элемента массива с помощью последовательности».
Даже если эта функция работает, я думаю, должен быть способ использовать функцию apply
, чтобы я мог избавиться от этого цикла.
Вы можете передать конструктор list
как функцию агрегирования по оси 1 (индекс)
data['New_column'] = data.agg(list, axis=1)
Выходы:
C1 C2 C3 C4 New_column
0 0.98 1.25 1.30 1.00 [0.98, 1.25, 1.3, 1.0]
1 1.10 0.99 1.41 0.99 [1.1, 0.99, 1.41, 0.99]
Вы можете использовать функцию вставки для вставки нового столбца. Это должно решить вашу проблему.
def append_new_column():
data = {"C1": [0.98, 1.10], "C2": [1.25, 0.99],
"C3": [1.3, 1.41], "C4": [1.00, .99] }
data = pd.DataFrame(data)
new_column = []
for i in range(len(data)):
new_column.append(data.iloc[i,0:4].values)
data.insert(len(data.columns), "New Column", new_column, True)
return data
Отвечает ли это на ваш вопрос? Панды Python вставляют список в ячейку