pandas - Pandas group by 从旧列计算新列
问题描述
我正在尝试跨组计算计算...实际上这不是一个很好的解释。让我展示一些代码:
import pandas as pd
df = pd.DataFrame({"state": ["ma", "ny", "dc", "ma", "ny", "dc", "ma", "ny", "dc", "dc"], "v": [1,2,3,2,1,2,3,4,1,10], "w": [1,1,1,1,1,1,1,1,1,10]})
print(df)
输出:
state v w
0 ma 1 1
1 ny 2 1
2 dc 3 1
3 ma 2 1
4 ny 1 1
5 dc 2 1
6 ma 3 1
7 ny 4 1
8 dc 1 1
9 dc 10 10
我想对每个州做同样的计算。
df.assign(diffv=df.groupby('state')['v'].diff())
我将创建一个新列 diffv,其中每个观察结果都是v
相同状态的前一个观察结果的变化。
state v w diffv
0 ma 1 1 NaN
1 ny 2 1 NaN
2 dc 3 1 NaN
3 ma 2 1 1.0
4 ny 1 1 -1.0
5 dc 2 1 -1.0
6 ma 3 1 1.0
7 ny 4 1 3.0
8 dc 1 1 -1.0
9 dc 10 10 9.0
现在我编写了一个函数 doubles(Series),它给定一个系列产生一个新系列,其中每个条目都是一个数字,表示在该系列中你必须回到多远才能找到一个一半的数字。也就是说,它翻倍的速度有多快。所以双打的工作原理是这样的。您可以与分数争论,但这就是想法。
v dbl
1, NaN
2, 1
3, 1.5
4, 2
5, 2.5
6, 3
7, 3.5
我想像使用 diff() 一样使用它:
df.assign(diffv=df.groupby('state')['v'].doubles())
这当然行不通,但我觉得我很接近了!
解决方案
推荐阅读
- docker-compose - 无法访问领事 webui docker compose
- stripe-payments - 条纹警告 - 无法识别的令牌创建参数
- java - 检测 IntelliJ 2019 内部使用的 Java 运行时版本?
- python - 将地图的一部分从openstreet加载到folium/leaflet
- java - 找不到符号,接口连接
- python - 安装 GOOGLE 助手的问题“没有名为 googlesamples.assistant.auth_helpers 的模块”
- vue.js - 我可以使用空组件创建 Vue 路由吗?
- php - Codeigniter Amazon SES SMTP 连接错误
- mysql - 使用 NOT LIKE 按 table1 列值更新 table2 列
- python - 使用 pydub 时访问被拒绝