【问题标题】:Conditional search in future rows within groupby in pandaspandas groupby 中未来行的条件搜索
【发布时间】:2018-09-14 03:40:41
【问题描述】:

以下是我拥有的数据框。 “目标”列是所需的输出。

   Group    Item    Value   Target
    1        0         5      0 
    1        1         4      0
    1        0         6      0
    1        0         3      1
    1        1         2      0
    1        0         1      1
    2        1         8      0
    2        0         9      0
    2        0         7      1

在给定的Groupif Item == 1 中,我试图找到Value 小于Item == 1 对应的Value 的第一个未来/下一行。例如,在第二行中,Item == 1 和对应的Value 为 4。Value 小于 4 的第一个未来行是第 4 行,其 Value 为 3。因此,@987654331 @column 用 1 指定查找。两个Item==1 有可能在满足条件的情况下具有相同的未来行。在这种情况下,我们也可以在Target 中有一个 1。

import pandas as pd
df = pd.DataFrame({'Group1': [1,1,1,1,1,1,2,2,2], 'Item': [0,1,0,0,1,0,1,0,0],  'Value': [5,4,6,3,2,1,8,9,7]})
df['next_Value'] = df.groupby(['Group'])['Value'].shift(-1)

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    使用cumsum创建一个帮助键,然后我们尝试使用transform获取每个组的第一个值,并将组内的每个值与第一个值进行比较,如果小于则返回1

    df['helpkey']=df.groupby('Group').Item.cumsum()
    df['New']=(df.Value<df.groupby(['Group','helpkey']).Value.transform('first')).astype(int)
    df
    Out[51]: 
       Group  Item  Value  Target  helpkey  New
    0      1     0      5       0        0    0
    1      1     1      4       0        1    0
    2      1     0      6       0        1    0
    3      1     0      3       1        1    1
    4      1     1      2       0        2    0
    5      1     0      1       1        2    1
    6      2     1      8       0        1    0
    7      2     0      9       0        1    0
    8      2     0      7       1        1    1
    

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2020-10-05
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 2018-07-22
      • 2019-08-10
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多