这是我的DataFrame:

import pandas as pd

df = pd.DataFrame(
    {
        'a': [100, 1123, 123, 100, 1, 0, 1],
        'b': [1000, 11123, 1123, 0, 55, 0, 1],
    },
    index=range(100, 107)
)

这是预期输出.我想创建列c:

       a      b      c
100   100   1000    NaN
101  1123  11123    NaN
102   123   1123    NaN
103   100      0    3.0
104     1     55    NaN
105     0      0    NaN
106     1      1    NaN

使用的掩码是:

mask = ((df.a > df.b))

我想得到出现mask的第一行的索引.我想保留原始索引,但得到reset_index()值.在该示例中,掩码的第一实例位于索引3处.

我可以通过以下方法获得第一个掩码实例:

df.loc[mask.cumsum().eq(1) & mask, 'c'] = 'the first row'

但我不知道如何获取索引.

推荐答案

Code

可以修改此代码以搜索第二和第三项,而不仅仅是第一项.

cond1 = df['a'] > df['b']
cond2 = df.groupby(cond1).cumcount().eq(0)
df.loc[cond1 & cond2, 'c'] = 'the first row'

pdf:

        a      b              c
100   100   1000            NaN
101  1123  11123            NaN
102   123   1123            NaN
103   100      0  the first row
104     1     55            NaN
105     0      0            NaN
106     1      1            NaN

如果你只寻找第一个值,下面的代码可能更简单:

df.loc[df['a'].gt(df['b']).cummax().cumsum().eq(1), 'c'] = 'the first row'

Updete Answer

如果只需要索引位置,请使用以下代码:

cond1 = df['a'] > df['b']
idx = cond1.idxmax()
loc = df.index.get_loc(idx)

-你是什么意思?

3

df.loc[df.index == idx, 'c'] = loc

pdf:

        a      b    c
100   100   1000  NaN
101  1123  11123  NaN
102   123   1123  NaN
103   100      0    3
104     1     55  NaN
105     0      0  NaN
106     1      1  NaN

Python相关问答推荐

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

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

沿着数组中的轴计算真实条目

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

Python键入协议默认值

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

如何从pandas的rame类继承并使用filepath实例化

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

使用groupby方法移除公共子字符串

在Python中使用if else或使用regex将二进制数据如111转换为001""

基于多个数组的多个条件将值添加到numpy数组

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

Discord.py -

如何将泛型类类型与函数返回类型结合使用?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

pytest、xdist和共享生成的文件依赖项

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

基于2级列表的Pandas 切片3级多索引