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