这是我的DataFrame:

import pandas as pd
df = pd.DataFrame(
    {
        'a': [1, 1, 1, 2, 2, 2, 2, 2, -1, -1, 2, 2, 2],
    }
)

预期输出:更改第a栏:

    a
0   1
1   1
2   1
3   1
4   1
5   1
6   1
7   1
8  -1
9  -1
10  2
11  2
12  2

流程如下:

a)寻找1和2的条纹

b)如果连线2在连线1之后出现,则连线2变为1.

例如:

从第3行到第7行有一个2的条纹.在此之前的连胜是1的连胜.所以我想把行37改为1,这是df的预期输出.

这些是我的小伙伴:

# attempt 1
df['streak'] = df.a.ne(df.a.shift(1)).cumsum()
# attempt 2
df.loc[(df.a.eq(2)) & (df.a.shift(1).eq(1)), 'a'] = 1

推荐答案

您可以使用shiftffill访问上一个组,然后使用boolean indexing:

# previous value
s = df['a'].shift()
# check if previous group is 1
m1 = s.where(df['a'].ne(s)).ffill().eq(1)
# is value 2?
m2 = df['a'].eq(2)

df.loc[m1&m2, 'a'] = 1

输出:

    a
0   1
1   1
2   1
3   1
4   1
5   1
6   1
7   1
8  -1
9  -1
10  2
11  2
12  2

中间体:

    a    s  where  ffill     m1     m2
0   1  NaN    NaN    NaN  False  False
1   1  1.0    NaN    NaN  False  False
2   1  1.0    NaN    NaN  False  False
3   2  1.0    1.0    1.0   True   True
4   2  2.0    NaN    1.0   True   True
5   2  2.0    NaN    1.0   True   True
6   2  2.0    NaN    1.0   True   True
7   2  2.0    NaN    1.0   True   True
8  -1  2.0    2.0    2.0  False  False
9  -1 -1.0    NaN    2.0  False  False
10  2 -1.0   -1.0   -1.0  False   True
11  2  2.0    NaN   -1.0  False   True
12  2  2.0    NaN   -1.0  False   True

Python相关问答推荐

Python中MongoDB的BSON时间戳

通过优化空间在Python中的饼图中添加标签

@Property方法上的inspect.getmembers出现意外行为,引发异常

DataFrame groupby函数从列返回数组而不是值

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

未删除映射表的行

运行Python脚本时,用作命令行参数的SON文本

cv2.matchTemplate函数匹配失败

python中字符串的条件替换

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

名为__main__. py的Python模块在导入时不运行'

在Python中调用变量(特别是Tkinter)

dask无groupby(ddf. agg([min,max])?''''

巨 Python :逆向猜谜游戏

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

如何在Python中创建仅包含完整天数的月份的列表

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?