在数据框列上分配替代值

时间:2019-04-29 16:24:33

标签: python pandas dataframe data-science

我有一些数据需要根据某种度量(小时率)划分为4个相等的区域。在某些情况下,我数据框中的某些行具有相同的每小时费用。大多数时候,这不会造成问题。但是在某些情况下,某些共享相同“小时费率”的数据进入一个仓,而其余数据进入另一个仓。我的要求是,这两个计数(一个放入第一个垃圾箱,一个放入第二个垃圾箱)必须由男人(或男人)平均组成(或尽可能相等)。

例如,如果8个人(每小时4个男性和4个女性)的时薪相同,并且其中2个位于1号垃圾箱中,而6个位于2号垃圾箱中,我希望性别为50%-50%每个垃圾箱中的百分比(垃圾箱1中的1个男性和1个女性,其余的在垃圾箱2中)。

另一个例子,如果6个人(每小时4个男性和2个女性)的时薪相同,并且其中3个在垃圾箱1中,而3个在垃圾箱2中,我想在垃圾箱中有2个男性和1个女性1个垃圾箱中有2个男性和1个女性。

我正在发送示例数据帧,并说明我到目前为止所做的事情:

data = [[1, 'M', 5.00] , [2, 'F', 5.00] , [3, 'M', 7.00] , [4, 'M', 8.00] , [5, 'M', 8.00] ,
    [6, 'F', 8.00] , [7, 'F', 8.00] , [8, 'F', 8.00] , [9, 'F', 8.00] , [10, 'M', 10.00] ,
    [11, 'M', 11.00] , [12, 'F', 12.00] , [13, 'M', 15.00] , [14, 'M', 15.00] , [15, 'M', 15.00] ,
    [16, 'F', 15.00] , [17, 'F', 15.00] , [18, 'M', 16.00] , [19, 'F', 17.00] , [20, 'F', 20.00]]

df = pd.DataFrame(data, columns = ['Pers. Number', 'Gender', 'Hourly Rate'])

我对数据进行排名,为每个原始数据赋予唯一的排名(为此我使用scipy统计信息):

df["Hourly Rate Rank"] = ss.rankdata(df['Hourly Rate'], method='ordinal')

然后我创建垃圾箱:

hrtotal = df['Hourly Rate'].count()

def HRQuartile(row):
    if row['Hourly Rate Rank'] <= hrtotal/4:
        val = 1
    elif row['Hourly Rate Rank'] <= (hrtotal/4)*2:
        val = 2
    elif row['Hourly Rate Rank'] <= (hrtotal/4)*3:
        val = 3
    else:
        val = 4
    return val

df['Hourly Rate Quartile'] = df.apply(HRQuartile, axis=1)

所以到这里为止一切正常,我得到了我的排名和相等的垃圾箱。

现在,我执行以下操作以获取有问题的四分位数:

f = df.groupby(['Hourly Rate Quartile', 'Hourly Rate']).size().reset_index(name='Count')

ff = f[f.groupby(['Hourly Rate'])['Hourly Rate Quartile'].transform('nunique')>1]

然后,我不知道该如何进行。谁能提供任何想法?

此外,如果您对如何提高此代码的效率有任何建议,我希望听到它。

谢谢!

0 个答案:

没有答案