用一个键获取多键dict的和,并将其添加到Python中的datfarme列中?
我有一个数据帧和一个dict,如下所示:用一个键获取多键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的第一个键获得总的和,并将结果作为
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])]