如何获取在Pandas DataFrame的最后一行中具有特定值的所有索引?

时间:2018-05-18 20:06:32

标签: python-3.x pandas dataframe

对于像<,p>这样的示例DataFrame

>>> import pandas as pd
>>> index = pd.date_range(start='1/1/2018', periods=6, freq='15T')
>>> data = ['ON_PEAK', 'OFF_PEAK', 'ON_PEAK', 'ON_PEAK', 'OFF_PEAK', 'OFF_PEAK']
>>> df = pd.DataFrame(data, index=index, columns=['tou'])
>>> df
                          tou
2018-01-01 00:00:00   ON PEAK
2018-01-01 00:15:00  OFF PEAK
2018-01-01 00:30:00   ON PEAK
2018-01-01 00:45:00   ON PEAK
2018-01-01 01:00:00  OFF PEAK
2018-01-01 01:15:00  OFF PEAK

如何获取tou值不是ON_PEAK但是在它之前的行的所有索引是ON_PEAK,即输出将是:

['2018-01-01 00:15:00', '2018-01-01 01:00:00']

或者,如果更容易获得ON_PEAK的所有行以及它们旁边的第一行,即

['2018-01-01 00:00:00', '2018-01-01 00:15:00', '2018-01-01 00:30:00', '2018-01-01 00:45:00', '2018-01-01 01:00:00']

1 个答案:

答案 0 :(得分:1)

您需要找到tou不是ON_PEAK的行,而使用pandas.shift()找到的上一个touON_PEAK。请注意,shift中的正值给出第n个先前值,而负值给出数据帧中第n个下一个值。

df.loc[(df['tou']!='ON_PEAK') & (df['tou'].shift(1)=='ON_PEAK')]

输出:

                       tou
2018-01-01 00:15:00 OFF_PEAK
2018-01-01 01:00:00 OFF_PEAK