python - .apply 可以使用其他团体的信息吗?

标签 python pandas dataframe group-by grouping

对于组中的每个元素,确定它是否存在于下一个组中(按照这些组出现的顺序 - 不一定是数字)。对于最后一组 - 全部False

示例:

df = pd.DataFrame({'group': [ 0,   1,   1,   0,   2 ], 
                     'val': ['a', 'b', 'a', 'c', 'c']})
grouped = df.groupby('group')
print(result)
0     True
1    False
2    False
3    False
4    False
Name: val, dtype: bool

最好的方法是什么?我可以像这样完成它,但它看起来太老套了:

keys = list(grouped.groups.keys())

iterator_keys = iter(keys[1:])
def f(ser):
    if ser.name == keys[-1]:
        return ser.isin([])
    next_key = next(iterator_keys)
    return ser.isin(grouped.get_group(next_key)['val'])
result = grouped['val'].apply(f)

最佳答案

尝试:

g = df.groupby("group")

m = g["val"].agg(set).shift(-1, fill_value=set())
x = g["val"].transform(lambda x: x.isin(m[x.name]))
print(x)

打印:

0     True
1    False
2    False
3    False
4    False
Name: val, dtype: bool

注意:

如果您想将最后一组的值替换为任何(不一定是False),您可以执行以下操作:

m = g["val"].agg(set).shift(-1)
x = g["val"].transform(lambda x: x.isin(m[x.name])
                                 if not pd.isnull(m[x.name])
                                 else values)

例如,如果您设置 values = True,则 x 将为:

0     True
1    False
2    False
3    False
4     True
Name: val, dtype: bool

关于python - .apply 可以使用其他团体的信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73379113/

相关文章:

python - 未渲​​染页面上的 Pyramid 错误

Python Pandas - 根据列表删除多个值

python - 将 bool 数据框中的所有 True 替换为单元格位置

python - 使用特定行的值作为列名称

python - 带 Lepl 的解析器

python - 关闭 __class__

python - 在 Python 中连接到 'Explicit FTP over TLS'(??)

python - 提取大于指定大小的连续值组

python - 如何减少 HDFStore 的大小开销?

r - 合并具有不相等观测值的数据集