的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