python - 在Python数据框中划分几列,其中分子和分母列将根据选择列表而变化

标签 python pandas dataframe division

我根据最终用户在选项列表上所做的选择,通过配对一个非常大的数据帧(大约 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/

相关文章:

numpy - Pandas 时间戳与 numpy 日期时间不能很好地配合?

python - 使用循环获取数据框列中的列表项

python - 模型 FlatPage 已经注册

python - 需要从一个txt文件读入字典

python - dataframe:删除具有某些类型值的对象类型列

python - 从 python 中的嵌套 URL 中抓取并解析表

python - 从具有重复键 Python 的字符串创建一个 dict/json

python - Pandas-创建一个根据列值插入新行的表?

python - 在 Pandas 中合并 Dataframe block

python - 如何使用 pandas 将 Series 重新排列为 DataFrame