用一个键获取多键dict的和,并将其添加到Python中的datfarme列中?

用一个键获取多键dict的和,并将其添加到Python中的datfarme列中?,python,pandas,dictionary,Python,Pandas,Dictionary,我有一个数据帧和一个dict,如下所示: import pandas as pd import numpy as np df = pd.DataFrame(np.array([[1, 2], [4, 5]]),columns=['a', 'b']) df a b 0 1 2 1 4 5 dict {(0, 'A', 1): 1, (0, 'A', 2): 2, (1, 'B', 1): 3, (1, 'B', 2): 4} 我试图通过dict的第一个键获得总的和,并将结果作为

我有一个数据帧和一个dict,如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 2], [4, 5]]),columns=['a', 'b'])
df
   a  b
0  1  2
1  4  5

dict
{(0, 'A', 1): 1, (0, 'A', 2): 2, (1, 'B', 1): 3, (1, 'B', 2): 4}
我试图通过dict的第一个键获得总的和,并将结果作为一个新列添加到我的数据帧中

这是我到目前为止所拥有的,但我认为必须有一种更有效的方法来做到这一点

total_by_1st={}
for (x, _, _), v in dict.items():
    if x in total_by_1st:
       total_by_1st[x] += v
    else:
       total_by_1st[x]=v

total_by_1st
{0: 3, 1: 7}
df['c'] = df.index.map(total_by_1st)
df
   a  b  c
0  1  2  3
1  4  5  7
我试图通过dict的第一个键获得总的和,并将结果作为一个新列添加到我的数据帧中

您可以在级别0上转换为系列和总和:

df['new'] = pd.Series(d).sum(level=0)

其中
d
是存储字典的变量的名称。请注意,您不应将变量命名为与内置变量相同的变量(
d
或类似的名称,而不是
dict

我试图通过dict的第一个键获得总的和,并将结果作为一个新列添加到我的数据帧中

您可以在级别0上转换为系列和总和:

df['new'] = pd.Series(d).sum(level=0)


其中
d
是存储字典的变量的名称。请注意,您不应将变量命名为与内置变量相同的变量(
d
或类似的名称,而不是
dict

与itertools类似:
[sum([d.get(i)表示i in v])表示k,v in itertools.groupby(d.keys(),key=lambda x:x[0])
与itertools类似:
[sum([d.get(i)表示i in v])表示k,v in itertools.groupby(d.keys(),key=lambda x:x[0])]