Итерация математической функции по фрейму данных pandas - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь выполнить вычисления на базе данных.Датафрейм имеет 65 столбцов.

id_1 Id_2   sum_id1 Sum_id2 Price   Cal_1   Cal_2
1    5      15      35      2       -68     -60
2    6      15      35      3       -99     -87
3    7      15      35      4       -128    -112
4    8      15      35      5       -155    -135
5    9      15      35      6       -180    -156

Даны столбцы от ID_1 до Price.Расчет производится как (ID_1-SumID_1) * Цена.Я должен повторить это для 60 столбцов.Поэтому мне нужно решение, которое повторяется.

Я пробовал метод от Numpy, но он полезен для одного расчета.Я должен пройти через 60 столбцов.

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Как насчет цикла for, использующего замены строк?

# assuming there are 60 unique values
n = 60
for i in range(1, n+1):
    df[f'Cal_{i}'] = (df[f'Id_{i}'] - df[f'SumID_{i}']) * df['Price']

1 голос
/ 01 июля 2019

Я использую filter и воссоздаю фрейм данных, затем concat возвращаем

s=(df.filter(like='Id').values-df.filter(like='Sum').values)*df.Price.values[:,None]
s=pd.DataFrame(s,columns=['Cal_'+str(x+1) for x in range(s.shape[1])],index=df.index)
df=pd.concat([df,s],axis=1)
df
   Id_1  Id_2  sum_id1  Sum_id2  Price  Cal_1  Cal_2
0     1     5       15       35      2    -68    -60
1     2     6       15       35      3    -99    -87
2     3     7       15       35      4   -128   -112
3     4     8       15       35      5   -155   -135
4     5     9       15       35      6   -180   -156
...