python-3.x - 在 pd.DataFrame 对象中使用带有组的 apply() 函数的 rolling()
问题描述
我正在尝试计算同一组的每一行之间的梯度
def get_gradient(row, row2):
return (row['foo'] - row2['foo'])/(row['bar'] - row2['bar'])
在下面的示例表中:
运行get_gradient(demo.iloc[0],demo.iloc[1])
将获得第一个非np.nan
值。然后get_gradient(demo.iloc[1],demo.iloc[2])
将获得下一个值。然而,当baz
变成 时B
,我们转移到一个“新窗口”
demo = pd.DataFrame(
{
'foo':[0.023939,0.180167,0.316840,0.497396,0.632713,0.332927,0.489553,0.677083,0.810815,0.967808],
'bar':[0.027107,0.070630,0.014774,0.059228,0.033585,0.010692,0.012511,0.011934,0.028882,0.365916],
'baz':['A','A','A','A','A','B','B','B','B','B',]
}
)
富 | 酒吧 | 巴兹 | |
---|---|---|---|
0 | 0.023939 | 0.027107 | 一个 |
1 | 0.180167 | 0.07063 | 一个 |
2 | 0.31684 | 0.014774 | 一个 |
3 | 0.497396 | 0.059228 | 一个 |
4 | 0.632713 | 0.033585 | 一个 |
5 | 0.332927 | 0.010692 | 乙 |
6 | 0.489553 | 0.012511 | 乙 |
7 | 0.677083 | 0.011934 | 乙 |
8 | 0.810815 | 0.028882 | 乙 |
9 | 0.967808 | 0.365916 | 乙 |
我希望达到下表:
富 | 酒吧 | 巴兹 | 毕业 | |
---|---|---|---|---|
0 | 0.023939 | 0.027107 | 一个 | 楠 |
1 | 0.180167 | 0.07063 | 一个 | 3.58955 |
2 | 0.31684 | 0.014774 | 一个 | -2.44688 |
3 | 0.497396 | 0.059228 | 一个 | 4.06164 |
4 | 0.632713 | 0.033585 | 一个 | -5.27696 |
5 | 0.332927 | 0.010692 | 乙 | 楠 |
6 | 0.489553 | 0.012511 | 乙 | 86.1056 |
7 | 0.677083 | 0.011934 | 乙 | -325.009 |
8 | 0.810815 | 0.028882 | 乙 | 7.89072 |
9 | 0.967808 | 0.365916 | 乙 | 0.465808 |
我知道和groupby()
,但无法确定正确的链接顺序。链接这些方法以形成预期表的最佳方法是什么?rolling()
apply(,axis=1)
解决方案
这是一个简单的方法:
foo_diff = demo.groupby('baz')['foo'].diff()
bar_diff = demo.groupby('baz')['bar'].diff()
demo['gradient'] = foo_diff/bar_diff
结果:
foo bar baz gradient
0 0.023939 0.027107 A NaN
1 0.180167 0.070630 A 3.589550
2 0.316840 0.014774 A -2.446881
3 0.497396 0.059228 A 4.061637
4 0.632713 0.033585 A -5.276957
5 0.332927 0.010692 B NaN
6 0.489553 0.012511 B 86.105553
7 0.677083 0.011934 B -325.008666
8 0.810815 0.028882 B 7.890725
9 0.967808 0.365916 B 0.465808
推荐阅读
- javascript - 如何使用 onEdit 触发器事件创建基于时间的触发器?
- algorithm - 递归算法的递归表示时间复杂度
- javascript - 如何将对象的 javascript 数组从一种格式转换为另一种格式?
- react-native - React native - 如何在滚动时在 Top View 上实现此动画
- node.js - 使用 node.js 将 Azure 文件共享复制到 Blob
- mysql - 检查字段内容是否有任何价值?
- jwt - WSO2 IS JWT Token 在调用 API 时返回 401 Unauthorized
- slack-api - 将 Slack 链接共享事件订阅仅限于用户,机器人不应触发链接共享事件订阅
- c++ - cpp 数组在抛出 std::bad_alloc 的实例后终止调用
- android - 无法在我的 ubuntu 中使用 android studio 写入文件