详情见post。
我的数据框架是:
import pandas as pd
df = pd.DataFrame(
{
a : [100, 1123, 123, 100, 1, 0, 1],
b : [1000, 11123, 1123, 0, 55, 0, 1],
c : [100, 1123, 123, 999, 11, 50, 1],
d : [100, 1123, 123, 190, 1, 105, 1],
e : [ a , b , c , d , e , f , g ],
}
)
这是我想要的产出。 一栏:
a b c d e x
0 100 1000 100 100 a NaN
1 1123 11123 1123 1123 b NaN
2 123 1123 123 123 c NaN
3 100 0 999 190 d NaN
4 1 55 11 1 e NaN
5 0 0 50 105 f f
6 1 1 1 1 g NaN
我的面罩是:
mask = (df.a > df.b)
这些是需要采取的步骤:
a) 选择符合面罩条件的第一行。
b) 以上步骤的<代码>a。
c) 第1行,上述数值为<代码>c和d
。 相当于其中之一的是科索沃。
d) 检索<代码>e,并设立栏目
例如,上述数据框架:
a) 面罩第一行是<代码>3。
b) <代码>a的价值为100。
c) 从面罩后面的浏览量(4、5、......)中,100分在<条码>、<条/代码>和<条码>之间的第一行为第5行。 因此,f栏选入<代码>x。
d) 因此,f 选入<代码>x。
这一形象说明上述步骤:
这是我尝试的:
mask = (df.a > df.b)
val = df.loc[mask.cumsum().eq(1) & mask, a ]
I prefer the solution to be generic like this answer.
如果你需要用其他微妙的不同条件测试该守则,我提供了一些额外的数据。 例如,如果没有符合面罩条件的一行。 在此情况下,<代码>x均为<代码>NaN。 栏目名称与以上编码相同。
df = pd.DataFrame({ a : [100, 1123, 123, -1, 1, 0, 1], b : [1000, 11123, 1123, 0, 55, 0, 1], c : [100, 1123, 123, 999, 11, 50, 1], d : [100, 1123, 123, 190, 1, 105, 1], e : [ a , b , c , d , e , f , g ]})
df = pd.DataFrame({ a : [100, 1123, 123, 100, 1, 0, 1], b : [1000, 11123, 1123, 0, 55, 0, 1], c : [100, 1123, 123, 999, 11, -1, 1], d : [100, 1123, 123, 190, 1, 10, 1], e : [ a , b , c , d , e , f , g ]})
df = pd.DataFrame({ a : [100, 1123, 123, 1, 1, 0, 100], b : [1000, 11123, 1123, 0, 55, 0, 1], c : [100, 1123, 123, 999, 11, -1, 50], d : [100, 1123, 123, 190, 1, 10, 101], e : [ a , b , c , d , e , f , g ]})
df = pd.DataFrame({ a : [100, 1123, 123, 100, 1, 1000, 1], b : [1000, 11123, 1123, 0, 55, 0, 1], c : [100, 1123, 123, 999, 11, 50, 500], d : [100, 1123, 123, 190, 1, 105, 2000], e : [ a , b , c , d , e , f , g ]})