从数据框中计算字典查找

时间:2021-01-02 08:36:12

标签: python pandas dataframe dictionary count

字典如下,显示了当月的团队成员姓名:

team_month = {
'TeamAAug' : ["William","Harper","Elijah","James"] ,
'TeamAOct' : ["William","Mason","Harper","Elijah","James"] ,
'TeamASep' : ["William","Mason","Elijah","James"] ,
'TeamBAug' : ["Mia","Emma","Charlotte","Sophia"] ,
'TeamBOct' : ["Mia","Sophia"] ,
'TeamBSep' : ["Emma","Charlotte","Sophia"]}

以下数据框显示每个人是否获得了当月的奖金:

enter image description here

我要计算每个团队每个月有多少奖金。理想的结果应该是这样的:

TeamAAug : 3
TeamAOct : 3
TeamASep : 0
TeamBAug : 2
TeamBOct : 1
TeamBSep : 0

我能想到和尝试过的:

import pandas as pd

team_month = {
'TeamAAug' : ["William","Harper","Elijah","James"] ,
'TeamAOct' : ["William","Mason","Harper","Elijah","James"] ,
'TeamASep' : ["William","Mason","Elijah","James"] ,
'TeamBAug' : ["Mia","Emma","Charlotte","Sophia"] ,
'TeamBOct' : ["Mia","Sophia"] ,
'TeamBSep' : ["Emma","Charlotte","Sophia"]}
    
data = {'Name': ["William","Mason","Harper","Elijah","James","Mia","Emma","Charlotte","Sophia",], 
'Aug' : ["Bonus","","Bonus","","Bonus","","Bonus","","Bonus",],
'Sep': ["","","","","","Bonus","","","",],
'Oct' : ["Bonus","","","Bonus","Bonus","","","","Bonus",]}

df = pd.DataFrame(data)

name_month_dict = df.set_index('Name').T.to_dict('dict')

for key, values in team_month.items():
        for v in values:
                print (v + key[-3:])

上面给了我每个人每月奖金的字典。

“name_month_dict”的输出:

{'William': {'Aug': 'Bonus', 'Sep': '', 'Oct': 'Bonus'}, 'Mason': {'Aug': '', 'Sep': '', 'Oct': ''}, 'Harper': {'Aug': 'Bonus', 'Sep': '', 'Oct': ''}...}

以及带有月份的名称:

WilliamAug
HarperAug
ElijahAug
…

我该如何继续?

1 个答案:

答案 0 :(得分:2)

让我们尝试在 loc 推导式中使用 dict 进行查找:

l = df.set_index('Name') # lookup dataframe
{k: l.loc[v, k[-3:]].eq('Bonus').sum() for k, v in team_month.items()}

{'TeamAAug': 3,
 'TeamAOct': 3,
 'TeamASep': 0,
 'TeamBAug': 2,
 'TeamBOct': 1,
 'TeamBSep': 0}
相关问题