python - Python/Pandas,根据多个值计算特定值
问题描述
使用 Python/Pandas 并给定一个名称-值 (Bob),我如何按工作和状态进行 value_count,并按月列出。初始df:
Bob 的输出应该是这样的:
我正在处理数千条记录,我需要某种方法来检索每个月特定名称的工作代码和状态的数量。
我可以使用 .loc 和 value_counts() 单独获取这些信息,但不能一次全部获取。Grouby 统计数据并不具体。有任何想法吗???
解决方案
我在您的测试 DataFrame 中添加了一行(六月):
Name State Job Code Month
0 Bob CA A APR
1 Joe CA B APR
2 Mary AZ C MAY
3 Bob CA D MAY
4 Bob NV C MAY
5 Bob CA D MAY
6 Bob CA D JUN
原因是为了表明我在月份(而不是字母顺序)上提供“日历”排序的方式可以正常工作。
要提供提到的“日历”排序,请从以下内容开始:
df.Month = pd.Categorical(df.Month, ['JAN', 'FEB', 'MAR', 'APR',
'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'])
然后,几乎所有的处理都可以在下面的指令中进行:
res = df.query('Name == "Bob"').drop(columns=['Name'])\
.set_index('Month').stack().reset_index(name='val')\
.groupby(['Month', 'level_1', 'val']).size()\
.sort_index(ascending=[True, False, True]).droplevel(1)
该指令很长(涉及多个步骤),因此要理解它,请分别运行每个步骤并查看中间结果。
我之前写过“几乎所有”,因为现在 MultiIndex 有不必要的列名。要清除它们,请运行:
res.index.names = ['', '']
最后的结果是:
APR CA 1
A 1
MAY CA 2
NV 1
C 1
D 2
JUN CA 1
D 1
dtype: int64
请注意,JUN的数据在 MAY之后,正如它应该的那样。
推荐阅读
- python - 从 ppt 幻灯片中提取所有标题(标题)
- android - 为什么我在 switch 中的条件语句被忽略了?
- python - 有没有办法使用 SpaCy 获得整个成分?
- c++ - CORBA::ORB_init 泄漏内存
- javascript - Javascript 出现未知错误,开发人员菜单中没有任何内容 (F12)
- ios - 'UIImage?在 swift 4 中不能转换为“UIImage”问题
- outlook - 是否可以在邮件正文中发送带有输入字段的电子邮件并获得回复?
- c - 许多带有套接字的消息队列
- serialization - 如何序列化类包含其他类对象
- java - 在 Java 中实现一个命名管道监听器,它将读取一个 Windows 命名管道