python - 熊猫:群体之间的差异
问题描述
嗨,我有一个看起来如下所示的熊猫 df(不是真实数据)
index datedjourney sequence values
1 1 1 120
2 1 1 100
3 1 2 75
4 1 3 50
5 1 3 30
6 1 3 61
7 1 4 40
8 1 4 50
9 2 1 86
10 2 1 40
11 2 2 70
如果我按 datedjourney 和这样的顺序分组
df.groupby(['datedjourney', 'sequence'])['values']
我想计算分组中的最后一行与第二组中的第一行之间的差异,因此df
看起来如下所示
index datedjourney sequence values diff_between_groups
1 1 1 120 NaN
2 1 1 100 NaN
3 1 2 75 -25
4 1 3 50 -25
5 1 3 30 NaN
6 1 3 61 NaN
7 1 4 40 -21
8 1 4 50 NaN
9 2 1 86 NaN
10 2 1 40 NaN
11 2 2 70 30.
所以应该计算第 2 行和第 3 行的值,并且应该将差异存储在第 3 行的新列diff_between_groups
中。然后是第 3 行和第 4 行之间的差异等。我不想计算第 8 行之间的差异和 9 因为那是一个新的datedjourney
.
解决方案
创建一个“diff_between_groups”列,它是“values”和“values”之间的差异,移动了一行。
制作一个布尔掩码以查找“datedjourney”相同且“sequence”与上面的行不同的行。
使用 pandas Series where 函数使用掩码替换“diff_between_groups”值。
df = pd.DataFrame({'index': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
'datedjourney': [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2],
'sequence': [1, 1, 2, 3, 3, 3, 4, 4, 1, 1, 2],
'values': [120, 100, 75, 50, 30, 61, 40, 50, 86, 40, 70]})
df['diff_between_groups'] = df['values'] - df['values'].shift()
mask = (df.datedjourney == df.datedjourney.shift()) & (df.sequence != df.sequence.shift())
df['diff_between_groups'] = df['diff_between_groups'].where(mask, np.nan)
print(df)
index datedjourney sequence values diff_between_groups
0 1 1 1 120 NaN
1 2 1 1 100 NaN
2 3 1 2 75 -25.0
3 4 1 3 50 -25.0
4 5 1 3 30 NaN
5 6 1 3 61 NaN
6 7 1 4 40 -21.0
7 8 1 4 50 NaN
8 9 2 1 86 NaN
9 10 2 1 40 NaN
10 11 2 2 70 30.0
推荐阅读
- reactjs - 如何将 JWT 令牌存储在 cookie React fetch 中
- android - 在 Intune 门户中打开应用程序的深度链接或动态链接
- mysql - WordPress数据库错误锁定等待超时;尝试为查询 UPDATE wp_wppa_session 重新启动事务
- python - 通过networkx在不同层中的六边形晶格
- python - 这个 lambda 函数是如何工作的?
- python - 如何打印生成器函数的输出值?
- reactjs - 乐观的 UI(react、swr、immer)
- css - 为什么某些图像在移动版 Firefox 中显示为假颜色?
- c++ - C++为类方法实现超时函数模板
- curl - Kubernetes cronJob 使用带有标头的 CURL 调用 REST API 因 curl(6) 失败:无法解析主机