gpt4 book ai didi

python - 如果条件适用于后续行和分组依据,则 Pandas 适用

转载 作者:行者123 更新时间:2023-12-04 07:41:00 28 4
gpt4 key购买 nike

我有以下 Pandas 数据框

      id  dist    ds
0 0 0 0
5 1 0 0
7 2 0 0
1 3 347 347
8 4 370 23
2 5 111 -259
9 6 115 4
3 7 222 107
4 8 898 676
11 9 2830 1932
10 10 1004 -1826
12 11 2315 1311
5244 12 556 -1759
4891 13 2111 1555
4890 14 2111 0
5268 15 4783 2672
5271 16 224 -4559
5270 17 222 -2
在上面,ds 列提供了 dist 的两个后续行之间的差异。 .比如id为4的那一行,ds就是23,也就是370-347。
我必须在名为 gid 的第 4 列中获取所有 id 作为列表,该列与以下条件匹配:
  • 如果abs(ds) value 大于 0 且小于 1000,然后将 id 作为列表附加到第 4 列。
  • 对于每个后续行检查 abs(ds)如果是 greater than 0 and less than 1000 ,然后附加 id4th column - gid .
  • 如果abs(ds)greater than 1000 ,然后将 id 附加到 gid 列。下面给出了一个预期输出示例。
           id  dist    ds    gid
    0 0 0 0 0,1,2,3,4,5,6,7,8
    5 1 0 0 0,1,2,3,4,5,6,7,8
    7 2 0 0 0,1,2,3,4,5,6,7,8
    1 3 347 347 0,1,2,3,4,5,6,7,8
    8 4 370 23 0,1,2,3,4,5,6,7,8
    2 5 111 -259 0,1,2,3,4,5,6,7,8
    9 6 115 4 0,1,2,3,4,5,6,7,8
    3 7 222 107 0,1,2,3,4,5,6,7,8
    4 8 898 676 0,1,2,3,4,5,6,7,8
    11 9 2830 1932 9
    10 10 1004 -1826 10
    12 11 2315 1311 11
    5244 12 556 -1759 12
    4891 13 2111 1555 13,14
    4890 14 2111 0 13,14
    5268 15 4783 2672 15
    5271 16 224 -4559 16
    5270 17 222 -2 17

  • 我尝试使用 iterrows 和 shift 的组合,但很快我意识到我一次只关注一行,而 shift 不起作用。
    我尝试设置 if 条件并用 id 填充数组,稍后我可以将其作为列附加到数据框,但我无法用后续行的值填充前一行。
    我如何获得所需的输出。

    最佳答案

    您可以通过 .cumsum() 创建满足条件的组.然后,使用 df.groupby() 在新创建的组上并使用 .transform() 将 id 的聚合列表广播回组内的每一行,如下所示:

    m_group = df['ds'].abs().ge(1000).cumsum()      # Groups for conditions 
    df['gid'] = (df.groupby(m_group)['id']
    .transform(lambda x: ','.join(x.astype(str).values)))
    输出:
          id  dist    ds                gid
    0 0 0 0 0,1,2,3,4,5,6,7,8
    5 1 0 0 0,1,2,3,4,5,6,7,8
    7 2 0 0 0,1,2,3,4,5,6,7,8
    1 3 347 347 0,1,2,3,4,5,6,7,8
    8 4 370 23 0,1,2,3,4,5,6,7,8
    2 5 111 -259 0,1,2,3,4,5,6,7,8
    9 6 115 4 0,1,2,3,4,5,6,7,8
    3 7 222 107 0,1,2,3,4,5,6,7,8
    4 8 898 676 0,1,2,3,4,5,6,7,8
    11 9 2830 1932 9
    10 10 1004 -1826 10
    12 11 2315 1311 11
    5244 12 556 -1759 12
    4891 13 2111 1555 13,14
    4890 14 2111 0 13,14
    5268 15 4783 2672 15
    5271 16 224 -4559 16,17
    5270 17 222 -2 16,17

    关于python - 如果条件适用于后续行和分组依据,则 Pandas 适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67466993/

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