python - 将字典中存在但数据中不存在的类别添加到计数输出中 - python
问题描述
我正在为 df 中的每列创建一些类别计数。列中不存在所有可能的类别 - 但它们存储在字典中。有没有可能将不在数据中的类别附加到 value_counts 数据中?有关预期输出的一些代码和示例,请参见下文。这些列有很多,所以在最后手动附加是不好的。太感谢了!
包含所有可能响应的字典
df_dic = {'veggie': ['cucumber', 'broccoli', 'spinach', 'kale', 'potatoe', 'pepper', 'tomatoe'],
'fruit': ['banana', 'orange', 'grapes', 'pear', 'melon', 'apple']}
数据
df = pd.DataFrame([('cucumnber', 'apple'),
('broccoli', 'pear'),
('spinach', 'orange'),
('spinach', 'orange'),
('kale', 'apple'),
('kale', 'banana'),
('potatoe', 'pear')],
columns=['veggie', 'fruit'])
value_counts 命令
dat = []
for col in df:
out_num = pd.DataFrame(df[col].value_counts()).sort_index().add_suffix('_num')
out_per = pd.DataFrame(df[col].value_counts(normalize=True)*100).sort_index().add_suffix('_per')
out = pd.concat([out_num, out_per], axis=1)
dat.append(out)
输出例如 dat[0]
veggie_num veggie_per
broccoli 1 14.285714
cucumnber 1 14.285714
kale 2 28.571429
potatoe 1 14.285714
spinach 2 28.571429
预期产出
veggie_num veggie_per
brocoli 1 14.285714
cucumber 1 14.285714
kale 2 28.571429
potatoe 1 14.285714
spinach 2 28.571429
pepper 0 00.00
tomatoe 0 00.00
解决方案
reindex
从df_dic
添加到之前的值dat
:
dat = []
for col in df:
out_num = pd.DataFrame(df[col].value_counts()).sort_index().add_suffix('_num')
out_per = pd.DataFrame(df[col].value_counts(normalize=True)*100).sort_index().add_suffix('_per')
out = pd.concat([out_num, out_per], axis=1).reindex(df_dic[col], fill_value=0)
dat.append(out)
dat[0]
:
veggie_num veggie_per
cucumber 1 14.285714
broccoli 1 14.285714
spinach 2 28.571429
kale 2 28.571429
potato 1 14.285714
pepper 0 0.000000
tomato 0 0.000000
*注意值需要拼写匹配才能正常工作。
通过一些简化:
dat = []
for col in df:
out = df[col].value_counts().to_frame().add_suffix('_num')
out[f'{col}_per'] = (df[col].value_counts(normalize=True) * 100)
out = out.reindex(df_dic[col], fill_value=0)
dat.append(out)
dat[0]
:
veggie_num veggie_per
cucumber 1 14.285714
broccoli 1 14.285714
spinach 2 28.571429
kale 2 28.571429
potato 1 14.285714
pepper 0 0.000000
tomato 0 0.000000
数据框和dict
使用:
df_dic = {
'veggie': ['cucumber', 'broccoli', 'spinach', 'kale', 'potato', 'pepper',
'tomato'],
'fruit': ['banana', 'orange', 'grapes', 'pear', 'melon', 'apple']
}
df = pd.DataFrame([('cucumber', 'apple'),
('broccoli', 'pear'),
('spinach', 'orange'),
('spinach', 'orange'),
('kale', 'apple'),
('kale', 'banana'),
('potato', 'pear')],
columns=['veggie', 'fruit'])
推荐阅读
- javascript - 如何在 JavaScript 中解构 json 数据
- ruby-on-rails - 语法错误,意外的keyword_ensure,期待
- c++ - 设置系统光标大小
- java - 有没有办法将 Google 的自定义方法与 Jersey 资源一起使用?
- javascript - api加载后javascript继续刷新页面
- alfresco - 代码中缺少 Alfresco pickerchildren.get.js
- database-design - 处理避免不一致状态的多状态系统
- python - 列出我使用 np.loadtxt 创建的数组的理解
- java - 将数据通过捆绑包从 Activity 传递到 Fragment 时获取 null
- python - 无法使用 paramiko 执行一些 unix 命令(我可以使用 pexpect)