这是我的数据框:
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'
但我不知道如何获取索引。
代码
可以修改此代码以搜索第二项和第三项,而不仅仅是第一项。
df:
如果您只查找第一个值,下面的代码可能更简单:
更新答案
如果您只想要索引的位置,请使用以下代码:
地点:
df:
根据您的条件进行过滤并获得第一个结果:
下面的代码使用 评估数据帧的每一行
.apply()
,当满足条件时a > b
,它返回该行的线性索引。结果写入新列'c'
。结果:
您可以对索引执行布尔索引并对第一项进行切片:
注意。如果没有 ,
[:1]
则使用而不是也可以工作。[1]
True
输出:
如果没有匹配,这将创建一个空列: