【问题标题】:How to apply a function to a multi keyed pandas dataframe如何将函数应用于多键熊猫数据框
【发布时间】:2016-07-31 05:06:05
【问题描述】:

我正在执行多维查找以在新列中分配一个值。

我有一个按月包含一些历史员工数据的表。此示例中有两个独特的人,他们可以在一个月内拥有多个工作。

我想创建一个新列,根据以下条件告诉我每个独特的人是否都有符合条件的工作。挑战在于必须按月/年考虑每一行。

import pandas as pd
import numpy as np

data = {'Month': ["January", "January", "January", "February", "February", "February", "March", "March", "March", "March"],
        'Year': [2015,2015,2015,2015,2015,2015,2016,2016,2016,2016],
        'Job #': [1,1,2,1,2,1,1,1,2,3],
        'Pay Group': ["Excluded","Included","Excluded","Excluded","Included","Included","Excluded","Exclcuded","Excluded","Included"],
        'Name': ["John","Bill","Bill","John","John","Bill","John","Bill","Bill","Bill"]}
df = pd.DataFrame(data, columns=['Month', 'Year', 'Job #', 'Pay Group', 'Name'])

df

符合条件的工作条件:

  • 如果 (Job # = 1 AND Pay Group = Include ) AND 如果先验条件为 false,则在给定的 month/year AND Pay Group = Includes 中查找下一个最大的 Job #

【问题讨论】:

    标签: pandas key


    【解决方案1】:

    IIUC:

    你想为每个人,在每个月/年中,你想抓住最小的工作#比如Pay Group == Included

    仅过滤包含的那些。按作业编号排序。按年、月和名称分组,采用最低观测指数。使用它来分配一个新列。

    dfi = df[df['Pay Group'] == 'Included'].sort_values('Job #')
    gc = ['Year', 'Month', 'Name'] 
    idx = dfi.groupby(gc, as_index=False)['Job #'].idxmin()
    df['Eligible Job'] = 'Not Eligible'
    df.ix[idx] = 'Eligible'
    
    df
    

    【讨论】:

    • 感谢 piRSquared。这过滤得很好。这还有另一部分......我需要这个来创建一个新列,将这些标记为符合条件的工作,例如“合格工作”:“合格”/“不合格”。另外,完成此操作后,如何重置 groupby 以便我可以回到完整的表?
    • 快到了。看起来代码覆盖了“合格”的原始行。我希望保留原始表格,但只有“合格工作”列 =“合格”或“不合格”。
    • 看起来代码覆盖了“Eligible”的原始行。我希望保留原始表格,但只有“合格工作”列 =“合格”或“不合格”。
    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2013-08-10
    • 2021-02-12
    • 2014-03-31
    相关资源
    最近更新 更多