python - 如何计算分组df的差异?
问题描述
name date value
a 1/1/2011 3
b 1/1/2011 5
c 1/1/2011 7
a 1/2/2011 6
b 1/2/2011 10
c 1/2/2011 14
我在这里有一个 df,其中的值是累积统计信息。所以实际值name: a
date: 1/2/2011
是 3 而不是 6。要获得特定日期的实际值,我需要将当天的值减去前一天的值。我想计算每个日期每个名称的实际值。类似于df.groupby(['name', 'date'])['value'].diff()
但此代码返回错误的内容。
最后我需要的是
name date actual value
a 1/1/2011 3
b 1/1/2011 5
c 1/1/2011 7
a 1/2/2011 3
b 1/2/2011 5
c 1/2/2011 7
解决方案
这可以在一行中以矢量化的方式完成。
import pandas as pd
df = pd.read_clipboard() # Reading from your question
df['value'] = df.groupby('name')['value'].diff(1).fillna(df['value'])
正如评论中所讨论的,在申请正确替换来自的值时,有必要引用原始'values
系列(这发生在每个标签的第一个实例中)。fillna
NaN
diff
'name'
推荐阅读
- latex - 如何在乳胶中获得符号`(英式键盘上#1左侧的那个)?
- jinja2 - dbt 使用 list 参数调用 post-hook 宏
- css - 创建六个宽度为 1fr 的网格列
- angular - TS2322:类型'IEvent | undefined' 不可分配给类型 'IEvent'
- java - 如何使用 appletviewer 使用菜单栏显示图像
- azure-functions - 我应该在我的计时器应用程序中将 ADAL 迁移到 MSAL 吗?
- webassembly - 无法为 WASM 配置 FontAwesome
- javascript - 无法从反应下拉列表中更新上下文 API 状态
- firebase - Flutter Firebase Google Auth 在生产中不起作用
- mysql - Laravel 计算具有条件的两列的总和