【问题标题】:Propagate / broadcast a value in groups back to the dataframe column将组中的值传播/广播回数据框列
【发布时间】:2022-10-15 01:48:32
【问题描述】:

我有一个数据框如下:

年周票政策用户
2022-35 12502 符合 MX
2022-35 12502 不符合我们
2022-35 12502 符合 AL
2022-35 12502 符合 BR
2022-35 12471 遵守 DE
2022-35 12409 符合我们
2022-35 12409 未遵守 BR
2022-35 12406 符合 MX

当有重复票时,我如何标准化每张票具有相同的策略?例如:如果一周内的票“未遵守”,则无论一周,该票的政策都应相同,因此,应该是这样的:

输出样本

年周票政策用户
2022-35 12502 不符合 MX
2022-35 12502 不符合我们
2022-35 12502 不遵守 AL
2022-35 12502 未遵守 BR
2022-35 12471 遵守 DE
2022-35 12409 不符合我们
2022-35 12409 未遵守 BR
2022-35 12406 符合 MX

基本上我想要的是当有重复的票证时,未遵守对已遵守的支配地位。

【问题讨论】:

  • 如果一周内重复的票,上面写着 COMPILED... 怎么办?

标签: python pandas dataframe group-by


【解决方案1】:

利用 "N" 在 ASCII 表上位于 "C" 之后的事实。所以max() 会选择“未遵守”而不是“已遵守”。如果您想通过工单对其进行标准化,请将max() 称为groupby().transform()

df['Policy'] = df.groupby('Ticket')['Policy'].transform('max')
  Year-Week  Ticket        Policy User
0   2022-35   12502  NOT COMPLIED   MX
1   2022-35   12502  NOT COMPLIED   US
2   2022-35   12502  NOT COMPLIED   AL
3   2022-35   12502  NOT COMPLIED   BR
4   2022-35   12471      COMPLIED   DE
5   2022-35   12409  NOT COMPLIED   US
6   2022-35   12409  NOT COMPLIED   BR
7   2022-35   12406      COMPLIED   MX

【讨论】:

    【解决方案2】:

    试试这段代码;

    df1 = df[['Year-Week', 'Ticket']].drop_duplicates()
    
    policy = []
    for time,ticket in zip(df1['Year-Week'],df1['Ticket']):
        df_temp = df[(df["Year-Week"] == time) & (df["Ticket"] == ticket)]
        if "NOT COMPLIED" in df_temp["Policy"].to_list():
            policy.extend(["NOT COMPLIED"] * df_temp.shape[0])
        else:
            policy.extend(["COMPLIED"] * df_temp.shape[0])
            
    df["Policy"] = policy
    

    希望这可以帮助...

    【讨论】:

    • 我认为这不起作用:(
    【解决方案3】:

    您可以执行 groupby 后跟转换并将其设置为 Policy 列;

    df['Policy'] = df.groupby(['Year-Week','Ticket']).transform(lambda x: 'NOT COMPLIED'if 'NOT COMPLIED' in x else 'COMPLIED')
    

    【讨论】:

    • 我试过这种形式,它一直显示以下错误:“ValueError:列必须与键长度相同”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多