Python 在数据帧中查找第一个值';s列大于另一列

Python 在数据帧中查找第一个值';s列大于另一列,python,pandas,Python,Pandas,我一直在寻找一种最有效的方法,从左到右(0,1,2,3)为每一行找到一个大于另一列(t)的所有列中的第一个值,并将相应的列标签放入一个新列(val)。如果没有列值大于0,则我希望改为0 由于某种原因,我找不到任何简单而有效的方法(因为真正的表实在太大了) 例如: 初始表格: t 0 1 2 3 JAN 3 1.9 2.1 2.6 2.9 FEB 6 2.0 4.0 5.0 9.0 MAR 2 1.0 3.0 4.0 4.0 APR

我一直在寻找一种最有效的方法,从左到右(0,1,2,3)为每一行找到一个大于另一列(t)的所有列中的第一个值,并将相应的列标签放入一个新列(val)。如果没有列值大于0,则我希望改为0

由于某种原因,我找不到任何简单而有效的方法(因为真正的表实在太大了)

例如:

初始表格:

     t    0    1    2    3
JAN  3  1.9  2.1  2.6  2.9
FEB  6  2.0  4.0  5.0  9.0
MAR  2  1.0  3.0  4.0  4.0
APR  4  1.5  5.0  6.0  2.0
     t    0    1    2    3   val
JAN  3  1.9  2.1  2.6  2.9   0
FEB  6  2.0  4.0  5.0  9.0   3
MAR  2  1.0  3.0  4.0  4.0   1
APR  4  1.5  3.0  6.0  2.0   2
最终表格:

     t    0    1    2    3
JAN  3  1.9  2.1  2.6  2.9
FEB  6  2.0  4.0  5.0  9.0
MAR  2  1.0  3.0  4.0  4.0
APR  4  1.5  5.0  6.0  2.0
     t    0    1    2    3   val
JAN  3  1.9  2.1  2.6  2.9   0
FEB  6  2.0  4.0  5.0  9.0   3
MAR  2  1.0  3.0  4.0  4.0   1
APR  4  1.5  3.0  6.0  2.0   2

谢谢

您的初始表和最终表之间的基本矩阵实际上有一点差异,我花了一段时间才注意到。行APR和列1中的值已从5.0更改为3.0。我将在这里使用后一个矩阵

from io import StringIO
import numpy as np
import pandas as pd

s = """
     t    0    1    2    3
JAN  3  1.9  2.1  2.6  2.9
FEB  6  2.0  4.0  5.0  9.0
MAR  2  1.0  3.0  4.0  4.0
APR  4  1.5  3.0  6.0  2.0
"""

# Read in the string
df = pd.read_csv(StringIO(s), delim_whitespace=True)

# Find all columns greater than your threshold column
s = np.where(df.gt(df['t'],0), ['', 0, 1, 2, 3], np.nan)

# Convert to dataframe, find the first instance, fill the rest with zeros and make a new column
df['vals'] = pd.DataFrame(s).min(axis=1).fillna(0).astype(int).values

# Which yields your expected result
print(df)
#     t    0    1    2    3  vals
#JAN  3  1.9  2.1  2.6  2.9     0
#FEB  6  2.0  4.0  5.0  9.0     3
#MAR  2  1.0  3.0  4.0  4.0     1
#APR  4  1.5  3.0  6.0  2.0     2

我是根据一个类似问题的答案得出这一结论的,这表明这种技术比其他几种方法更快。

对于两个表之间的不匹配,我深表歉意。。。您提供的解决方案非常有效,而且照明速度很快:)。谢谢!