Использование словарей для умножения столбцов, например, по ссылкам Pandas - PullRequest
0 голосов
/ 26 июня 2018

У меня есть такой фрейм данных, и я хотел бы умножить строки на их ссылочные значения в другом фрейме данных, используя панд. После этого я хотел бы добавить все продукты из этих строк и сохранить их в столбце с именем Pro_Sum. Я знаю, что Python не передает вещи по ссылке, но я могу связать здесь имя, поэтому я пытаюсь создать словарь для умножения значений в соответствии с его именем, но я не добился успеха.

df = pd.read_excel (C:/"dummy")
d = {"C1": 2, "C2": 5,"C3":4, "C4":1}
df.mul(pd.Series(d), axis=1)

prod = d.keys() 
df[prod] = df[prod].mul(pd.Series(d), axis=1)[prod]
to_sum_t = list(df)
#.sum ignores the none numeric values.
df['Pro_sum'] = df[to_sum_t].sum(axis=1)

Input

ID  AU  HP  Name1   Value1  CHC1    Name2 Value2 CHC2   Name3 Value3 CHC3 
1   4   3   C1        10    100      0      0       0     0      0      0       
2   6   2   C2        20    95      C1      6       5     0      0      0    
3   2   7   C3        4     40      C4      6       60    0      0      0   
4   8   9   C1        8     100      0      0       0     0      0      0    
5   2   6   C1        6     10      C2      15      86   C4      1      4    

Справочный столбец

Names Values
  C1    2
  C2    5
  C3    4
  C4    1
  Example row 5 Pro_Sum = 6*2 + 15*5 + 1*1 = 88

Минимальный выход

ID  AU  HP  Name1 Value1 CHC1   Name2 Value2 CHC2   Name3 Value3 CHC3 Pro_Sum
1   4   3   C1      10    100      0    0     0       0      0      0    20 
2   6   2   C2      20    95      C1    6     5       0      0      0    112
5   2   6   C1       6    10      C2    15    86      C4     1      4    88

1 Ответ

0 голосов
/ 26 июня 2018

Я думаю, что нужно filter столбцы по именам, replace значения по словарю и преобразовать в numy массивы по values, кратно, сумма и присвоить новому столбцу:

d = {"C1": 2, "C2": 5,"C3":4, "C4":1}

a = df.filter(like='Name').replace(d).astype(int).values
b = df.filter(like='Value').values

df['Pro_Sum'] = (a * b).sum(axis=1)
print (df)
   ID  AU  HP Name1  Value1  CHC1 Name2  Value2  CHC2 Name3  Value3  CHC3  \
0   1   4   3    C1      10   100     0       0     0     0       0     0   
1   2   6   2    C2      20    95    C1       6     5     0       0     0   
2   3   2   7    C3       4    40    C4       6    60     0       0     0   
3   4   8   9    C1       8   100     0       0     0     0       0     0   
4   5   2   6    C1       6    10    C2      15    86    C4       1     4   

   Pro_Sum  
0       20  
1      112  
2       22  
3       16  
4       88
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...