我根据最终用户在选项列表上所做的选择,通过配对一个非常大的数据帧(大约 400 列)来创建一个数据帧。选项列表选项之一是最终用户想要的分母类型。这是一个示例表,其中包含最终计算之前的所有信息。
county _tcount _tvote _f_npb_18_count _f_npb_18_vote
countycode
35 San Benito 28194 22335 2677 1741
36 San Bernardino 912653 661838 108724 61832
countycode _f_npb_30_count _f_npb_30_vote
35 384 288
36 76749 53013
但是,我在创建代码时遇到了麻烦,该代码会自动将从第五列(不包括索引)开始的每一列除以它之前的列(跳过所有其他列)。我见过示例( Divide multiple columns by another column in pandas ),但它们都使用固定的列名称,这在这方面是无法实现的。我可以通过固定列来改变列(基于位置),但不能通过基于位置的其他可变列来改变列。我尝试根据列位置修改上述链接中的代码:
calculated_frame = [county_select_frame[county_select_frame.columns[5: : 2]].div(county_select_frame[4: :2], axis=0)]
输出:
[ county _tcount _tvote _f_npb_18_count _f_npb_18_vote \
countycode
35 NaN NaN NaN NaN NaN
36 NaN NaN NaN NaN NaN]
RuntimeWarning: invalid value encountered in greater (abs_vals > 0)).any()
当除数是固定字段时,使用 [5: :2]
确实有效。如果我不能让它工作,那没什么大不了的(但这会很棒拥有我想要的所有选项)。
最佳答案
我的偏好是通过设置索引并使用过滤器
来分别拆分计数和投票数据帧来组织它。然后使用加入
d1 = df.set_index('county', append=True)
counts = d1.filter(regex='.*_\d+_count$').rename(columns=lambda x: x.replace('_count', ''))
votes = d1.filter(regex='.*_\d+_vote$').rename(columns=lambda x: x.replace('_vote', ''))
d1[['_tcount', '_tvote']].join(votes / counts)
_tcount _tvote _f_npb_18 _f_npb_30
countycode county
35 San Benito 28194 22335 0.650355 0.750000
36 San Bernardino 912653 661838 0.568706 0.690732
关于python - 在Python数据框中划分几列,其中分子和分母列将根据选择列表而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580566/