python 如何引用panda Dataframe 中特定行上方的行?

pxy2qtax  于 2023-01-04  发布在  Python
关注(0)|答案(3)|浏览(138)

我有以下Pandas Dataframe :

issue_stat     timestamp   state
    0          11:00:00     hi
    1          12:40:00     lo
    9          13:00:00     av
    3          15:00:00     hi 
    8          18:00:00     hi
    4          20:00:00     lo

我想把timestamp=18:00:00上面一行的stateMap到jazz。我必须在代码中使用timestamp=18:00:00。我该怎么做呢?
我知道如何Maptimestamp=18:00:00state

dataframe.loc[dataframe['timestamp'] == '18:00:00', 'state'] = whatever

但是我很难指向它上面的行。再次强调,我必须在代码中引用timestamp = 18:00:00
因此输出如下所示:

issue_stat     timestamp   state
     0          11:00:00     hi
     1          12:40:00     lo
     9          13:00:00     av
     3          15:00:00    jazz 
     8          18:00:00     hi
     4          20:00:00     lo
f8rj6qna

f8rj6qna1#

shift()方法在任一方向上移动序列。因此,要设置以下时间戳为18:00的单元格的状态:

df.loc[df["timestamp"].shift(-1) == '18:00:00', 'state'] = 'jazz'

产生:

issue_stat           timestamp    state
0           0            11:00:00       hi
1           1            12:40:00       lo
2           9            13:00:00       av
3           3            15:00:00     jazz
4           8            18:00:00       hi
5           4            20:00:00       lo
sczxawaw

sczxawaw2#

可以使用shift函数获取 Dataframe 的前一行,然后使用布尔索引选择timestamp等于18:00:00的行,并更新这些行的状态列。
以下是如何执行此操作的示例:

df['prev_state'] = df['state'].shift(1)
df.loc[df['timestamp'] == '18:00:00', 'prev_state'] = 'jazz'

这将向 Dataframe 添加一个名为prev_state的新列,其中包含前一行的state列的值,然后,它将把时间戳等于18:00:00的行的prev_state列更新为jazz。
如果要更新state列而不是添加新列,只需使用以下代码:

df.loc[df['timestamp'] == '18:00:00', 'state'] = 'jazz'

这将把timestamp等于18:00:00的行的state列更新为jazz。

7lrncoxx

7lrncoxx3#

您可以使用shift()

test_df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], \
    'B' : ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], \
    'state' : ['NY', 'NY', 'NY', 'NY', 'NY', 'FL', 'FL', 'FL', 'FL', 'FL']})
A   B   state
0   1   A   NY
1   2   B   NY
2   3   C   NY
3   4   D   NY
4   5   E   NY
5   6   F   FL
6   7   G   FL
7   8   H   FL
8   9   I   FL
9   10  J   FL

我引用了值C,但值B-1行的值发生了变化。
一个二个一个一个
但在您的示例中,您将选择列timestamp而不是B,并选择一个值。

相关问题