Python 如何将列名与字典键匹配并向计数器添加值

Python 如何将列名与字典键匹配并向计数器添加值,python,pandas,loops,dataframe,dictionary,Python,Pandas,Loops,Dataframe,Dictionary,我为每个单元格创建了一个具有二进制值的数据框,其中每行是用户,每列是用户可以选择(或不选择)的公司,如下所示: company1 company2 company3 1 0 0 0 0 1 0 1 1 company1 company2 company3 total_low total_mid total_high 1 0 0 0 0

我为每个单元格创建了一个具有二进制值的数据框,其中每行是用户,每列是用户可以选择(或不选择)的公司,如下所示:

company1 company2 company3
1        0        0
0        0        1
0        1        1
company1 company2 company3 total_low total_mid total_high
1        0        0         0         0         1
0        0        1         1         0         0
0        1        1         2         0         0
我还创建了一本字典,将每家公司分为高、中、低价值公司:

{'company1': 'high',
'company2': 'low',
'company3': 'low'}
目前有一些公司在数据框架中,但不在字典中,但这应该很快得到修复。我想为每个用户选择高、中、低价值公司的次数创建变量。最终应该是这样的:

company1 company2 company3
1        0        0
0        0        1
0        1        1
company1 company2 company3 total_low total_mid total_high
1        0        0         0         0         1
0        0        1         1         0         0
0        1        1         2         0         0
我开始创建一个循环来实现这一点,但我不确定如何将列名与字典键/值匹配,或者这是否是最有效的方法(总共有18000行/用户和100列/公司):

一种可能的办法:

d = {'company1': 'high',
     'company2': 'low',
     'company3': 'low'}

df.join(df.rename(columns=d)
         .groupby(level=0, axis=1).sum()
         .reindex(['low','mid','high'], axis=1, fill_value=0)
         .add_prefix('total_')
       )
输出:

   company1  company2  company3  total_low  total_mid  total_high
0         1         0         0          0          0           1
1         0         0         1          1          0           0
2         0         1         1          2          0           0

不像“广黄”那么短,而是另一种方式

熔化数据帧

df2=pd.melt(df,  value_vars=['company1', 'company2', 'company3'])
地图字典创建另一列
total

df2['total']=df2.variable.map(d)
旋转
high
low
并添加middle和join到
df

compa=['low','medium','high']
df.join(df2.groupby(['variable','total'])['value'].sum().unstack('total', fill_value=0).reindex(compa,axis=1, fill_value=0).add_prefix('total_').reset_index().drop(columns=['variable']))

列=d中的d应该是什么?我收到一个错误,说“名称'd'未定义”