python - 减去重复行熊猫的值
问题描述
我有以下数据框:
Date Code Name Days
23/09/2019 WO Smith Thomas 1
23/09/2019 RE Johnson Robert 1
24/09/2019 WO Smith Thomas 1
24/09/2019 NW Smith Thomas 0.5
25/09/2019 OP Johnson Robert 0.5
25/09/2019 GF Johnson Robert 0.5
如果基于日期和名称列重复,我想检查天数总和是否> 1。如果是,那么我想用另一个来确定最大值,但不要删除任何行,否则做没有什么。
所需的输出将是:
Date Code Name Days
23/09/2019 WO Smith Thomas 1
23/09/2019 RE Johnson Robert 1
24/09/2019 WO Smith Thomas 0.5
24/09/2019 NW Smith Thomas 0.5
25/09/2019 OP Johnson Robert 0.5
25/09/2019 GF Johnson Robert 0.5
有熊猫的方法吗?
我可以使用 Python 循环,但它似乎效率不高
谢谢
解决方案
如果没有关于您要执行的数值运算的更多详细信息,获得所需结果的唯一方法如下:
df.Days = df.groupby(['Date', 'Name']).Days.transform(
lambda x: x if len(x) == 1 else
[max(i - min(x), min(x)) if sum(x) > 1 else i for i in x])
背后的原因是:
- 对所有行
Date
进行Name
分组 - 查看该
Days
列并检查是否有重复项 - 如果是这种情况,它将用最小值减去所有值,并在列表中最小值的减法结果之间保持最大值(这是一种防止将最小值减去自身的廉价方法)
Date Code Name Days
0 23/09/2019 WO Smith Thomas 1.0
1 23/09/2019 RE Johnson Robert 1.0
2 24/09/2019 WO Smith Thomas 0.5
3 24/09/2019 NW Smith Thomas 0.5
4 25/09/2019 OP Johnson Robert 0.5
5 25/09/2019 GF Johnson Robert 0.5
推荐阅读
- python - 我试图从具有 100 个结果限制的 Api 获取数据,但是在使用时间戳更进一步时遇到问题
- c# - 使用 c#,为什么字母 r 和 b 被解释为标签文本中的 HTML 中断,我该如何阻止它?
- javascript - 如何通过 ajax 发布到烧瓶并更新 SQLAlchemy 数据库来删除事件 FullCalendar?
- python - 有没有办法循环回到python中某个部分代码的开头
- xml - 使用 XSLT 将节点信息更新为新值
- javascript - javascript中html内的循环函数(React)
- python - TensorFlow 嵌入层触发 InvalidArgumentError
- javascript - React Native 堆栈导航器无法在 ios 设备上运行
- neural-network - Intel OpenFL - RuntimeError:mat1 和 mat2 形状不能相乘(128x512 和 2048x4096)
- java - 如何排除对 Spring Java 中特定字段的验证