Python 计算组中元素之间的差异

Python 计算组中元素之间的差异,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,考虑在a中每个类别正好有两行的数据帧: d = pd.DataFrame({"a": ["a", "b", "c", "a", "b", "c"], "b": [1, 3, 1, 4, 2, 6]}) > a b 0 a 1 1 b 3 2 c 1 3 a 4 4 b 2 5 c 6 a b 0 a 3 1 b 1 2 c 5 我想计算b与a之间的绝对差值: d = pd.DataFrame({

考虑在
a
中每个类别正好有两行的数据帧:

d = pd.DataFrame({"a": ["a", "b", "c", "a", "b", "c"], "b": [1, 3, 1, 4, 2, 6]})
>   a   b
0   a   1
1   b   3
2   c   1
3   a   4
4   b   2
5   c   6
    a   b
0   a   3
1   b   1
2   c   5
我想计算
b
a
之间的绝对差值:

d = pd.DataFrame({"a": ["a", "b", "c", "a", "b", "c"], "b": [1, 3, 1, 4, 2, 6]})
>   a   b
0   a   1
1   b   3
2   c   1
3   a   4
4   b   2
5   c   6
    a   b
0   a   3
1   b   1
2   c   5

您可以将它们分组,然后计算差异和abs(链):


索引可能不完全符合要求,但您可能会发现这一点。

由于
a
中的每个类别正好有2行,因此可以将数据帧拆分为两行,如下所示:

first  = d.drop_duplicates("a", keep="first")
second = d.drop_duplicates("a", keep="last")
然后合并这些值并计算差值:

merged = first.merge(second, on="a")
(merged.b_x - merged.b_y).abs()

我正在使用800k行数据集,该方法对我来说似乎非常无效。当你说无效时,你的确切意思是什么?它花费了太多时间,以至于我厌倦了等待,并为我的具体案例实施了另一个解决方案,不是一般的方法如果你能找到一种更快的方法来达到同样的效果,如果你能与我们分享,那就太好了。当然,但这是不同的问题。我有两个数据帧,必须比较一列。我刚刚合并了它们。我实际上考虑过写这种方法需要的东西,每个值只在“a”中出现一次。我很高兴你解决了这个问题。