我如何找到:每列中的第一个非NaN值是DataFrame中该列的最大值吗?

Kor*_*gay 4 python max nan pandas

例如:

      0     1
0  87.0   NaN
1   NaN  99.0
2   NaN   NaN
3   NaN   NaN
4   NaN  66.0
5   NaN   NaN
6   NaN  77.0
7   NaN   NaN
8   NaN   NaN
9  88.0   NaN
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:[False, True]因为87是第一个!NaN值但不是列中的最大值0.99然而,这是第一个!NaN值,并且确实是该列中的最大值.

WeN*_*Ben 6

选项A) :只是做groupbyfirst

(可能不是100%可靠)

df.groupby([1]*len(df)).first()==df.max()
Out[89]: 
       0     1
1  False  True
Run Code Online (Sandbox Code Playgroud)

选项b):bfill

或者使用bfill(通过列中的向后值填充任何NaN值,然后第一行后面的第一行bfill不是NaN值)

df.bfill().iloc[0]==df.max()
Out[94]: 
0    False
1     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

选项c):stack

df.stack().reset_index(level=1).drop_duplicates('level_1').set_index('level_1')[0]==df.max()
Out[102]: 
level_1
0    False
1     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

选项d):idxmaxfirst_valid_index

df.idxmax()==df.apply(pd.Series.first_valid_index)
Out[105]: 
0    False
1     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

选项e)(来自Pir):idxmaxwithisna

df.notna().idxmax() == df.idxmax()     
Out[107]: 
0    False
1     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)