【问题标题】:Pandas groupby with isin for consecutive groups带有 isin 的 Pandas groupby 连续组
【发布时间】:2021-10-01 18:27:33
【问题描述】:

我有一个如下所示的数据框:

arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6])

我想要的输出是表示第 2 列中的值是否在下一个连续组中的布尔值。这些组由第 1 列中的值表示。例如,4 出现在第 0 组中,而下一个连续组出现在第 1 组中:

output = pd.DataFrame([[False],[False],[True],[False],[True],[True],[Nan],[Nan],[Nan]])

第 2 组的输出将是 Nan,因为第 3 组不存在。

到目前为止,我已经尝试过:

output = arr.groupby([0])[1].isin(arr.groupby([0])[1].shift(periods=-1))

这不起作用,因为我无法在 groupby series 上应用 isin()

【问题讨论】:

    标签: pandas group-by isin


    【解决方案1】:

    您可以创建一个包含移位组项目列表的辅助列,然后使用返回 TrueFalseNaN 的函数对其进行检查:

    import pandas as pd
    import numpy as np
    
    arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6]])
    arr = pd.merge(arr, arr.groupby([0]).agg(list).shift(-1).reset_index(), on=[0], how='outer')
    
    def check_columns(row):
        try:
            if row['1_x'] in row['1_y']:
                return True
            else:
                return False
        except:
            return np.nan
        
    arr.apply(check_columns, axis=1)
    

    结果:

    0    False
    1    False
    2     True
    3    False
    4     True
    5     True
    6      NaN
    7      NaN
    8      NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 2016-02-20
      • 1970-01-01
      • 2021-06-08
      相关资源
      最近更新 更多