gpt4 book ai didi

python - 基于 n-1 索引记录的值的 pandas groupby

转载 作者:行者123 更新时间:2023-11-28 21:55:26 24 4
gpt4 key购买 nike

在以下数据中:


Name, Group, Value

Mike, A, 0
Peter, A, 5
Adam, A, 12
Jared, A, 18
Bob, B, 0
Jason, B, 1
Dan, B, 9

在 Series(或将计算序列附加到最后一列的 DataFrame)中获得以下结果是否可行?


0
5
7
6
0
1
8

这些值是通过记录的 Value 减去记录的前一个记录计算的(即,如果它的记录在 Adam 上,则意味着 Peter的记录)的。但是,我也想在Group变量的基础上获取,也就是说我不想获取BobValue基于 JaredValue,因为这两个记录的 Group 值不同 - 我只在每个特定的 Group< 中计算它 变量。

我不确定它是否只能在 pandas 上完成。我使用 Pandas 0.13。

最佳答案

可以直接使用diff groupby方法:

In [23]: df.groupby('Group').Value.diff(1).fillna(0)
Out[23]:
0 0
1 5
2 7
3 6
4 0
5 1
6 8
dtype: float64

这与使用 shift 和 subtract 做同样的事情:

In [21]: df.groupby('Group').Value.shift()
Out[21]:
0 NaN
1 0
2 5
3 12
4 NaN
5 0
6 1
dtype: float64

并用 0 填充 NaN:

In [22]: (df.Value - df.groupby('Group').Value.shift()).fillna(0)
Out[22]:
0 0
1 5
2 7
3 6
4 0
5 1
6 8
dtype: float64

原答案:

您只需将它与移位值列进行比较:

In [11]: df = pd.read_csv('foo.csv')

In [12]: res = df.Value - df.Value.shift()

In [13]: res
Out[13]:
0 NaN
1 5
2 7
3 6
4 -18
5 1
6 8
Name: Value, dtype: float64

看起来您想使 NaN 和负数为 0:

In [14]: res[pd.isnull(res) | (res < 0)] = 0

In [15]: res
Out[15]:
0 0
1 5
2 7
3 6
4 0
5 1
6 8
Name: Value, dtype: float64

关于python - 基于 n-1 索引记录的值的 pandas groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22727901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com