python - Groupby 搜索第一个和最后一个真值

标签 python pandas

我有一个带有重复索引的 pd.Series,每个索引都包含一组 bool 值:

FA155    False
FA155    False
FA155    False
FA155    True
FA155    True
FA155    True
FA155    True
FA155    True
FA155    False

我试图以一种有效的方式为每个不同的索引做的是,仅将序列的第一个和最后一个 True 值保留为 True,并将其余值设置为 False。 True 之间也可以有 False 值。

因此对于这个示例,结果将是:

FA155    False
FA155    False
FA155    False
FA155    True
FA155    False
FA155    False
FA155    False
FA155    True
FA155    False

如有任何帮助,我们将不胜感激。

最佳答案

您可以将 locidxmax 一起用于原始 df 和反转的 df

这将产生第一个和最后一个 True 值的索引。之后只需将不同的索引设置为 False

例如:

设置

z = sio("""i    v
FA154    False
FA155    False
FA155    True
FA155    True
FA155    True
FA155    True
FA155    True
FA155    False
FA156    False
FA156    True
FA156    False
FA156    False
FA156    True""")

df = pd.read_table(z, delim_whitespace=True)

    i       v
0   FA154   False
1   FA155   False
2   FA155   True
3   FA155   True
4   FA155   True
5   FA155   True
6   FA155   True
7   FA155   False
8   FA156   False
9   FA156   True
10  FA156   False
11  FA156   False
12  FA156   True

idxmax()

这与获取 df 和使用 reset_index 是一样的。然后,首先为您获取索引列表 (v1) 和最后 (v2) True 值:

v1 = df.groupby("i").v.idxmax().values
v2 = df[::-1].groupby("i").v.idxmax().values

然后使用你的逻辑:

df.loc[v1, "v"] = True & df.loc[v1, "v"]
df.loc[v2, "v"] = True & df.loc[v2, "v"]
df.loc[~df.index.isin(np.concatenate([v1,v2])), "v"] = False

使用 & 的想法是不要意外地将任何 False 值设置为 True

结果:

>>> df.set_index("i")

        v
i   
FA154   False
FA155   False
FA155   True
FA155   False
FA155   False
FA155   False
FA155   True
FA155   False
FA156   False
FA156   True
FA156   False
FA156   False
FA156   True

关于python - Groupby 搜索第一个和最后一个真值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50571537/

相关文章:

python - 在 pandas 数据框中,如何检查两个字符串是否存在于同一行但不同列中?

python - 想要使用实际位置和字母位置的总和为 python 中的数据框中的列创建分数

python - 在图像上绘制多个透明蒙版

python - 统计抛硬币的结果

python - 风车属性错误: 'module' object has no attribute 'settings'

Python super : calling a base class method which contains another base class method that is overriden by derived class

python - 转换数据帧以在 flask python 中返回为 "application-json"

python - 将 Pandas 数据框转换为 N 对 1 字典,其中 N 列是指向单个列的键作为值

python - 按列位置掩码 2 df

python - Django : extract image from database and display in template