python - Pandas 跨行和列的净值
问题描述
我有一个数据框如下:
Col1 Col2 H1 H2 H3
A up 19 19 10
A down 6 11
B up 13 17
B down 15 13 11
C up 13 15 16
我想从上面得到以下信息:
Col1 Col2 H1 H2 H3
A up 19 13
A down 1
B up 6
B down 15
C up 13 15 16
每种Col1, H1, H2, H3
类型的Col2
值都已为up
和净值down
。
例如对于
A up 19 19 10
A down 6 11
净是
A up 19 13
A down 1
通过19-0
, 19-6
,获得11-10
行数和列数非常大,所以我尽量不要硬编码它们的值或循环它。有熊猫这样做的方法吗?
解决方案
如果列中有任何负值,您可以尝试获取每个分组列的差异并反转序列
df.groupby('Col1')['H1','H2','H3'].apply(lambda x:x.diff().fillna(0).transform(lambda x: list(reversed(x.tolist())) if any(x<0) else x) if len(x)>1 else x).abs()
出去:
H1 H2 H3
0 19.0 13.0 0.0
1 0.0 0.0 1.0
2 0.0 0.0 6.0
3 15.0 0.0 0.0
4 13.0 15.0 16.0
我曾尝试使用没有反转功能的反转熊猫列表,我不知道为什么它不起作用。
df.groupby('Col1')['H1','H2','H3'].apply(lambda x:x.diff().fillna(0).transform(lambda x: x[::-1] if any(x<0) else x) if len(x)>1 else x).abs()
推荐阅读
- c++ - 加载共享库时出错:libwx_gtk3u_core-3.1.so.3:无法打开共享对象文件:没有这样的文件或目录
- reactjs - 客户端路由在 NextJS 中不起作用
- javascript - React Native 获取元素相对于父元素的位置
- javascript - 异想天开的日期创建在 TypeScript 游乐场中有何不同反应?
- reactjs - 使用 REST API 插件在 wordpress 主题中反应路由器
- java - 像 Google Chrome 一样的设置活动(带有单选按钮的子菜单)
- .net - 执行 createdtabase() 方法时未创建函数 Linq Vb.net
- ios - 如何在 iOS 上使用调度队列问题?
- reactjs - 未定义变量时如何等待
- scala - scala如何使用继承和模板类的模式匹配