Вот решение с использованием метода pandas apply. Как правило, не идеально, когда вы можете использовать операции столбца / строки. Но это работает.
import pandas as pd
data = {
'code1': ['101', '101', '101', '101', '101', '101'],
'code2': ['101', '101', '101', '201', '201', '201'],
'code3': ['101', '101', '101', '201', '201', '301'],
'code4': ['101', '201', '201', '201', '301', '301'],
'value1': [1000, 1000, 1000, 1000, 1000, 1000],
'value2': [1000, 1000, 1000, 1000, 1000, 1000],
'value3': [1000, 1000, 1000, 1000, 1000, 1000],
'value4': [1000, 1000, 1000, 1000, 1000, 1000]
}
df = pd.DataFrame(data)
def apply_to_row(row, value):
code_cols = ['code1', 'code2', 'code3', 'code4']
value_cols = ['value1', 'value2', 'value3', 'value4']
code_value_sum = 0
for code_col, value_col in zip(code_cols, value_cols):
if row[code_col] == value:
code_value_sum += row[value_col]
return code_value_sum
code_values = ['101', '201', '301'] # probably replace with a distinct value list of code columns
for code_value in code_values:
df['sum_code_' + str(code_value)] = df.apply(apply_to_row, value=code_value, axis=1)
вот результат:
code1 code2 code3 code4 value1 value2 value3 value4 sum_code_101 sum_code_201 sum_code_301
0 101 101 101 101 1000 1000 1000 1000 4000 0 0
1 101 101 101 201 1000 1000 1000 1000 3000 1000 0
2 101 101 101 201 1000 1000 1000 1000 3000 1000 0
3 101 201 201 201 1000 1000 1000 1000 1000 3000 0
4 101 201 201 301 1000 1000 1000 1000 1000 2000 1000
5 101 201 301 301 1000 1000 1000 1000 1000 1000 2000
Спасибо!