Сумма значений в строке на основе заголовка столбцов

#python #regex #dataframe

#python #регулярное выражение #фрейм данных

Вопрос:

У меня есть такой набор данных: введите описание изображения здесь

Я хочу вычислить сумму apple_*_C , apple_*_Cr , apple_*_Cu в каждой строке, соответственно, со следующим кодом.

 for test in ['apple']:
    df[f'{test}_C']=df.filter(regex=f'^{test}_d_C').sum(1)
    df[f'{test}_C']=df.filter(regex=f'^{test}_d_Cr').sum(1)
    df[f'{test}_C']=df.filter(regex=f'^{test}_d_Cu').sum(1)
  

Тем не менее, df[f'{test}_C']=df.filter(regex=f'^{test}_d_C').sum(1) будет вычисляться сумма apple_*_C и apple_*_Cr , apple_*_Cu в строке, а не только apple_*_C .
Пожалуйста, посоветуйте, как мне его изменить.

Комментарии:

1. Используйте «$» для привязки к концу, аналогично тому, как «^» привязывается к началу: df.filter(regex=f'^{test}_d_C$').sum(1)

2. почему ваше право 3 раза в одном и том же столбце результатов?

Ответ №1:

 import pandas as pd

data = {
    "Apple_1_C" : [1,2],
    "Apple_2_C" : [2,3],
    "Apple_3_C" : [3,4],
    "Apple_1_Cr" : [4,5],
    "Apple_1_Cr" : [5,6],
    "Apple_1_Cu" : [6,7],    
    "Apple_2_Cu" : [7,8],        
}

df = pd.DataFrame(data)

df
  

введите описание изображения здесь

 for i, test in enumerate(['Apple']):
    df[f'{test}_C_sum']=df.filter(regex=f'^{test}_d_C$').sum(1)
    df[f'{test}_Cr_sum']=df.filter(regex=f'^{test}_d_Cr').sum(1)
    df[f'{test}_Cu_sum']=df.filter(regex=f'^{test}_d_Cu').sum(1)
df
  

введите описание изображения здесь