您如何使用熊猫找到最低和最高?

时间:2018-10-15 21:50:43

标签: python python-2.7 pandas

如果我有这样的熊猫数据框:

     A    B    C    D    E   F   G
0    1    1   nan  nan   1   1  nan
1    1   nan  nan  nan   1   1  nan
2    1    1    1   nan  nan  1  nan
3    1    1   nan  nan   1   1  nan

如何获取NaN值之前的最后一个值的索引和最后的整体值的索引?

这样我得到了回报:

(0,B) (0,F) (1,A) (1,F) (2,C) (2楼) (3,B) (3,F)

作为我的索引。

2 个答案:

答案 0 :(得分:1)

对于第一个要求,使用

>>> df.isnull().shift(-1,axis=1).fillna(False).idxmax(1)

0    B
1    A
2    C
3    B

第二次,

df.notnull().T[::-1].T.idxmax(1)

0    F
1    F
2    F
3    F

您可以让他们操纵这些系列以获得所需的预期输出。例如,

>>> list(zip(s1.to_dict().items(), 
             s2.to_dict().items()))

[((0, 'B'), (0, 'F')),
 ((1, 'A'), (1, 'F')),
 ((2, 'C'), (2, 'F')),
 ((3, 'B'), (3, 'F'))]

答案 1 :(得分:0)

让我们在布尔数据帧上使用np.where,该数据帧指示最后一个非null值,后跟一个NaN。

r, c = np.where((df.isnull().shift(-1, axis=1) & df.notnull()).dropna(axis=1))

list(zip(df.index[r], df.columns[c]))

输出:

[(0, 'B'),
 (0, 'F'),
 (1, 'A'),
 (1, 'F'),
 (2, 'C'),
 (2, 'F'),
 (3, 'B'),
 (3, 'F')]

详细信息:

使用此布尔逻辑为要输出的索引创建一个布尔值显示True的数据框。

(df.isnull().shift(-1, axis=1) & df.notnull())

输出:

       A      B      C      D      E     F    G
0  False   True  False  False  False  True  NaN
1   True  False  False  False  False  True  NaN
2  False  False   True  False  False  True  NaN
3  False   True  False  False  False  True  NaN

使用dropna删除G列,然后使用np.where获取上述数据框中真实位置的索引值。最后,使用df.index和df.columns在np.where返回的位置获取索引标签,然后使用zip创建元组和list