的Python GROUPBY申请恢复奇数据帧

这里是我的功能:的Python GROUPBY申请恢复奇数据帧

def calculate_employment_two_digit_industry(df): 

df['intersection'] = df['racEmpProb'] * df['wacEmpProb']

df['empProb'] = df['intersection']/df['intersection'].sum()

df['newEmp'] = df['empProb'] * df['Emp']

df = df[['h_zcta', 'w_zcta', 'indID', 'newEmp', 'empProb']]

df.rename(columns = {'newEmp' : 'Emp'}, inplace = True)

return df

这里是我的测试:

def test_calculate_employment_two_digit_industry(): 

testDf = pandas.DataFrame({'h_zcta' : [99163, 99163, 99163, 99163],

'w_zcta' : [83843, 83843, 83843, 83843],

'indID' : [11, 21, 22, 42],

'Emp' : [20, 20, 40, 40],

'racEmpProb' : [0.5, 0.5, 0.6, 0.4],

'wacEmpProb' : [0.7, 0.3, 0.625, 0.375],

'1_digit' : [1, 1, 2, 2]})

expectedDf = pandas.DataFrame({'h_zcta' : [99163, 99163, 99163, 99163],

'w_zcta' : [83843, 83843, 83843, 83843],

'indID' : [11, 21, 22, 42],

'Emp' : [14, 6, 28.5716, 11.4284],

'empProb' : [0.7, 0.3, 0.71429, 0.28571]})

expectedDf = expectedDf[['h_zcta', 'w_zcta', 'indID', 'Emp', 'empProb']]

final = testDf.groupby(['h_zcta', 'w_zcta', '1_digit'])\

.apply(calculate_employment_two_digit_industry).reset_index()

assert expected.equals(final)

正如你可以在测试我有看到预期的函数返回。除了我可以修复的代码中潜在的数学错误,这里是返回的数据框,我如何才能返回正常的数据框(如果normal是正确的术语),即没有图层只是列和行?

     h_zcta w_zcta indID Emp empProb 

h_zcta w_zcta 1_digit

99163 83843 1 0 99163 83843 11 14.0 0.7

1 99163 83843 21 6.0 0.3

2 0 99163 83843 22 28.0 0.7

1 99163 83843 42 12.0 0.3

在此先感谢您。

回答:

你需要.reset_index(drop=True)

即:

final = testDf.groupby(['h_zcta', 'w_zcta', '1_digit']).apply(

calculate_employment_two_digit_industry).reset_index(drop=True)

>>> final.index

RangeIndex(start=0, stop=4, step=1)

以上是 的Python GROUPBY申请恢复奇数据帧 的全部内容, 来源链接: utcz.com/qa/258144.html

回到顶部