首页 > 解决方案 > 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())

这当然行不通,但我觉得我很接近了!

标签: pandas

解决方案


推荐阅读