python - 如何在熊猫中划分一组连续的两行
问题描述
我有以下数据框
d = {'id': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5,], 'value': [21, 44, 51, 10, 30, 7, 15, 51, 24, 122, 36, 41, 15, 12, 35, ], 'year': [2007, 2007, 2007, 2007, 2007, 2009, 2009, 2009, 2009, 2009, 2008, 2008, 2008, 2008, 2008]}
df = pd.DataFrame(d, columns = ['id','value','year'])
我想按 ID 和年份分组。然后,我想得到每年价值之间差异的百分比。
我可以得到每年之间的差异
df["difprev"]= df.sort_values(by=['id','year']).groupby(['id']).value.diff()
但我不知道如何将每个差异“diffprev”划分为前一个差异,以获得(de)增加的年百分比,因为我找不到类似于 diff() 的 groupby 函数
你能帮助我吗?谢谢
解决方案
df = df.sort_values(by=['id','year'])
df['percdif']=df.difprev / df.value.shift() * 100
结果:
id value year difprev percdif
0 1 21 2007 NaN NaN
10 1 36 2008 15.0 71.428571
5 1 7 2009 -29.0 -80.555556
1 2 44 2007 NaN NaN
11 2 41 2008 -3.0 -6.818182
6 2 15 2009 -26.0 -63.414634
2 3 51 2007 NaN NaN
12 3 15 2008 -36.0 -70.588235
7 3 51 2009 36.0 240.000000
3 4 10 2007 NaN NaN
13 4 12 2008 2.0 20.000000
8 4 24 2009 12.0 100.000000
4 5 30 2007 NaN NaN
14 5 35 2008 5.0 16.666667
9 5 122 2009 87.0 248.571429
推荐阅读
- android - FCM C++ Qt 客户端令牌刷新
- php - 如何将徽标插入到excel下载的文件php中
- android-emulator - 如何在 AndroidTV 模拟器上添加键盘语言?
- ios - 从 SOAP 响应中获取 JSON
- python - 以正常格式转换日期对象
- php - wpdb::update 无法更新名为“活动”的字段
- spring - Gradle“无法解析 org.springframework:spring-jdbc:5.0.6.RELEASR”
- ubuntu - 如何使用单个命令从 Ubuntu 中的所有位置删除特定目录/文件?
- javascript - 使用 jQ ajax 从三个现有表单中的一个提交的发送值
- javascript - 如何从数组中的每个元素中删除一个字符串?