Существует библиотека утилиты, OmniFaces , которая делает это из коробки.
@Inject @Param
private String key;
@Inject @Param
private Long id;
Используйте ниже, должно работать быстрее:
import itertools
my_list=[(pd.Series(df.loc[:,list(i)].sum(axis=1),\
name='_sum_'.join(df.loc[:,list(i)].columns))) for i in list(itertools.combinations(df.columns,2))]
final_df=pd.concat(my_list,axis=1)
print(final_df)
duration_sum_credit_amount duration_sum_installment_commitment \
0 1175 10
1 5999 50
2 2108 14
3 7924 44
4 4894 27
credit_amount_sum_installment_commitment
0 1173
1 5953
2 2098
3 7884
4 4873
Объяснение : print(list(itertools.combinations(df.columns,2)))
дает:
[('duration', 'credit_amount'),
('duration', 'installment_commitment'),
('credit_amount', 'installment_commitment')]
Пост, который делают:
[ 112]это печатает комбинации столбцов вместе. поэтому я просто суммировал его по оси = 1, назвал его в pd.series и дал ему имя, присоединившись к ним.
Опубликуйте это, просто добавьте их в список и объедините их по оси = 1, чтобы получить окончательный результат. :)
Вы уже указали на itertools.combinations
, который является правильным инструментом здесь, и сэкономит вам немного для циклов и проблемы с повторяющимися столбцами. См. документацию для более подробной информации о перестановках, комбинациях и т. Д.
Во-первых, давайте создадим DataFrame, чтобы мы могли воспроизвести пример:
import pandas as pd
from itertools import combinations
df = pd.DataFrame({
'a': [1,2,3],
'b': [4,5,6],
'c': [7,8,9]
})
>>> df
a b c
0 1 4 7
1 2 5 8
2 3 6 9
Теперь давайте приступим к работе. Идея состоит в том, чтобы получить все combinations
столбцов, а затем выполнить словарь, чтобы получить что-то вроде {column_name: sum}
. Вот оно:
>>> pd.DataFrame({c1 + '_sum_' + c2: df[c1] + df[c2]
for c1, c2 in combinations(df.columns, 2)})
a_sum_b a_sum_c b_sum_c
0 5 8 11
1 7 10 13
2 9 12 15
Обратите внимание, что вы можете заменить sum
на любую другую функцию, которая работает с двумя pd.Series
.
Функция может иметь еще одно условие if, чтобы проверить, добавлено ли добавленное ассоциированное значение в виде столбца к фрейму данных, как показано ниже:
def automate_add(add):
columnLst=[]
#list where we will add column names to avoid the associate sum columns
for i, column in enumerate(df):
for j, operando in enumerate(df):
if column != operando:
if operando + '_sum_' + column not in columnLst:
columnName = column + '_sum_' + operando
add[columnName] = df[column] + df[operando]
columnLst.append(columnName)
Я не проверял это на ваших данных. Попробуйте и дайте мне знать, если это не сработает.