Мне сложно понять, как перебирать переменные в кадре данных pandas и выполнять ту же арифметическую функцию для каждой.
У меня есть фрейм данных df
, содержащий три числовые переменные x1
, x2
и x3
. Я хочу создать три новые переменные, умножив каждую на 2. Вот что я делаю:
existing = ['x1','x2','x3']
new = ['y1','y2','y3']
for i in existing:
for j in new:
df[j] = df[i]*2
Приведенный выше код фактически создает три новые переменные y1
, y2
и y3
в фрейме данных. Но значения y1
и y2
замещаются значениями y3
, и все три переменные имеют одинаковые значения, соответствующие значению y3
. Я не уверен, что мне не хватает.
Очень признателен за любое руководство / предложение. Благодарю.
3 ответа
Здесь вы выполняете цикл примерно 9 раз - по 3 раза для каждого столбца, причем каждая итерация перезаписывает предыдущую.
Вы можете захотеть что-то вроде
for e, n in zip(existing,new):
df[n] = df[e]*2
Я бы сделал что-нибудь более общее
#existing = ['x1','x2','x3']
exisiting = df.columns
new = existing.replace('x','y')
#maybe you need map+lambda/for for each existing string
for (ind_existing, ind_new) in zip(existing,new):
df[new[ind_new]] = df[existing[ind_existing]]*2
#maybe there is more elegant way by using pandas assign function
Вы можете объединить исходный DataFrame со столбцами с двойными значениями:
cols_to_double = ['x0', 'x1', 'x2']
new_cols = list(df.columns) + [c.replace('x', 'y') for c in cols_to_double]
df = pd.concat([df, 2 * df[cols_to_double]], axis=1, copy=True)
df.columns = new_cols
Итак, если ваш входной фрейм данных df
:
x0 x1 x2 other0 other1
0 0 1 2 3 4
1 0 1 2 3 4
2 0 1 2 3 4
3 0 1 2 3 4
4 0 1 2 3 4
После выполнения предыдущих строк вы получите:
x0 x1 x2 other0 other1 y0 y1 y2
0 0 1 2 3 4 0 2 4
1 0 1 2 3 4 0 2 4
2 0 1 2 3 4 0 2 4
3 0 1 2 3 4 0 2 4
4 0 1 2 3 4 0 2 4
Вот код для создания df
:
import pandas as pd
import numpy as np
df = pd.DataFrame(
data=np.column_stack([np.full((5,), i) for i in range(5)]),
columns=[f'x{i}' for i in range(3)] + [f'other{i}' for i in range(2)]
)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.