Получить последнее ненулевое значение строки и ее столбца в pandas DataFrame - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу получить последнее ненулевое значение (крайнее справа) строки C в этом фрейме данных. При этом я также хочу получить его год (имя столбца).

Вот мой DataFrame:

df = pd.DataFrame(np.random.randint(0,100,size=(4, 5)),
                  columns=['2016', '2017', '2018', '2019', '2020'],
                  index=['A', 'B', 'C', 'D'])
df.iloc[2, 2:5] = np.NaN
print(df)
    2016    2017    2018    2019    2020
A   41      69      63.0    85.0    16.0
B   12      99      88.0    87.0    13.0
C   80      15      NaN     NaN     NaN
D   42      27      3.0     76.0    6.0

Результат должен выглядеть как {'year' : 2017, 'value' : 15}. Как лучше всего достичь этого результата?

1 Ответ

0 голосов
/ 19 февраля 2020

Что-то вроде этого должно решить это

In [1]: import pandas as pd 
   ...: import numpy as np 
   ...: df = pd.DataFrame(np.random.randint(0,100,size=(4, 5)), 
   ...:                   columns=['2016', '2017', '2018', '2019', '2020'], 
   ...:                   index=['A', 'B', 'C', 'D']) 
   ...: df.iloc[2, 2:5] = np.NaN 
   ...: print(df)                                                                                                                                                                                     
   2016  2017  2018  2019  2020
A    13    78   9.0  13.0  98.0
B    35     3  32.0   6.0  42.0
C    26    24   NaN   NaN   NaN
D    77    91  96.0  60.0  94.0

In [2]: value = int(df.loc['C'][~df.loc['C'].isna()][-1])                                                                                                                                             

In [3]: year = df.loc['C'][df.loc['C'] == value].index.values[0]                                                                                                                                      

In [4]: result = {'year': year, 'value': value}                                                                                                                                                       

In [5]: result                                                                                                                                                                                        
Out[5]: {'year': '2017', 'value': 24}

Вы можете разбить вышеприведенные выражения на части, чтобы лучше понять, как каждая функция используется здесь вместе для получения желаемого результата.

...