有没有一种方法可以从分组列旁边的列中提取值?

时间:2019-08-01 17:30:07

标签: pandas dataframe

我正在使用按供应商和最近日期分组的数据框来分析文件。现在,我需要提取一个与最近日期相对应的分数。

数据框(work_data)如下:

活动日期设施城市设施名称\ 0 2018年TORRANCE梦幻晚餐
1 2018年TORRANCE梦幻晚餐
2 2018年TORRANCE梦幻晚餐
3 2017年TORRANCE梦幻晚餐
4 2017年TORRANCE梦幻晚餐
5 2017年TORRANCE梦幻晚餐
6 2017年TORRANCE梦幻晚餐
7 2017年TORRANCE梦幻晚餐
2017年8月TORRANCE梦幻晚餐
9 2017年“梦RR以求的晚餐”

                      PE DESCRIPTION PROGRAM STATUS  SCORE SERIAL NUMBER  \

0餐厅(0-30)座位中度活动风险97.0 DA2FXQNN6
1个餐厅(0-30)座位处于中度活动风险97.0 DA2FXQNN6
2餐厅(0-30)座位处于中等风险,处于活动状态97.0 DA2FXQNN6
3餐厅(0-30)座位活动风险中等95.0 DACP43IQW
4餐厅(0-30)座位活动风险中等95.0 DACP43IQW
5餐馆(0-30)座位活动风险中等95.0 DACP43IQW
6餐厅(0-30)座位活动风险中等95.0 DACP43IQW
7餐厅(0-30)座位活动风险中等95.0 DACP43IQW
8餐馆(0-30)座位活动风险中等96.0 DAEMVMRBY
9餐厅(0-30)座位活动风险中等96.0 DAEMVMRBY

                  _id_x VIOLATION CODE  \

0 5d39d1f0f2134bd98132b84b F048
1 5d39d1f0f2134bd98132b84b F046
2 5d39d1f0f2134bd98132b84b F033
3 5d39d1f0f2134bd98132b84c F048
4 5d39d1f0f2134bd98132b84c F044
5 5d39d1f0f2134bd98132b84c F040
6 5d39d1f0f2134bd98132b84c F035
7 5d39d1f0f2134bd98132b84c F034
8 5d39d1f0f2134bd98132b84d F037
9 5d39d1f0f2134bd98132b84d F035

                           VIOLATION DESCRIPTION                     _id_y  

0#47。可用许可证5d33fdad3569b9ef86dbbff6
1#46。上次检查报告可用... 5d33fdad3569b9ef86dbbff7
2#33.非食品接触表面清洁且可进入... 5d33fdad3569b9ef86dbbff8
3#47.可用的许可证5d33fdaf3569b9ef86deab10
4#44.地板,墙壁和天花板:适当地建... 5d33fdaf3569b9ef86deab11
5#40.水暖:水暖状况良好,维护良好... 5d33fdaf3569b9ef86deab12
6#35。设备/器具-已批准;已安装... 5d33fdaf3569b9ef86deab13
7#34.洗碗设施:充足,可维护... 5d33fdaf3569b9ef86deab14
8#37。充足的通风和照明;设计... 5d33fdaf3569b9ef86df905f
9#35。设备/器具-已批准;已安装... 5d33fdaf35 dataframe

我曾尝试在这一年对groupby.max()进行操作,但无法计算出分数列。

我尝试过:

corr_group = work_data[['ACTIVITY DATE','FACILITY NAME','SCORE']].groupby(['FACILITY NAME']).agg({
    'ACTIVITY DATE':'max',
    'FACILITY NAME':'count',
    'SCORE'
    })

并尝试使用以下函数进行迭代:

def high_score():
    corr_group['High_Score'] = 1
    for row in work_data:
        if (work_data['ACTIVITY DATE']==corr_group['ACTIVITY DATE'] 
        and work_data['FACILITY NAME']==corr_group['FACILITY NAME']):
            corr_group['High_Score']=work_data['SCORE']

1 个答案:

答案 0 :(得分:0)

将日期列转换为时间戳

 df['ACTIVITY DATE']=pd.to_datetime(df['ACTIVITY DATE'])

然后按供应商分组并使用max()

df_grouped=df.groupby(['FACILITY NAME'])[['SCORE','ACTIVITY DATE']].max()

或者,您可以使用数据透视表,请确保按降序对“活动日期”进行排序,然后从每个组中获取第一行

df.sort_values(by='ACTIVITY DATE',inplace=True,ascending=False)
df_pivot=df.pivot_table(index=['FACILITY NAME'],values=['SCORE','ACTIVITY DATE'],aggfunc='first')