簡體   English   中英

如何在 Pandas 數據框中根據條件移動行值

[英]How to shift row values with condition in a Pandas dataFrame

如何使用鍵匹配來移動 dataFrame 值? 例如,我有一個包含“date”、“id”和“num0”列的數據框。 當我移動這個數據框時,我想考慮 'date' 和 'id' 值。

通過這段代碼,我得到了“當前結果”。 但是我想將空值設置為 row3 的移位值,因為沒有 ID='A' 和 date='2015-10-05' 的記錄。

df_temp1 = pd.DataFrame({'id' : ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'date' : ['2015-10-1', '2015-10-2', '2015-10-3', '2015-10-4','2015-10-1', '2015-10-2', '2015-10-3', '2015-10-4'],
'num0' : ['1', '2', '3', '4', '1', '2', '3', '4']})

df_temp1['num0_shifted'] = df_temp1['num0'].shift(-1)
df_temp1.head(10)

當前結果:

    date    id  num0    num0_shifted
0   2015-10-1   A   1   2
1   2015-10-2   A   2   3
2   2015-10-3   A   3   4
3   2015-10-4   A   4   1
4   2015-10-1   B   1   2
5   2015-10-2   B   2   3
6   2015-10-3   B   3   4
7   2015-10-4   B   4   NaN

我想得到的結果:

    date    id  num0    num0_shifted
0   2015-10-1   A   1   2
1   2015-10-2   A   2   3
2   2015-10-3   A   3   4
3   2015-10-4   A   4   NaN
4   2015-10-1   B   1   2
5   2015-10-2   B   2   3
6   2015-10-3   B   3   4
7   2015-10-4   B   4   NaN

使用DataFrameGroupBy.shift

df_temp1['num0_shifted'] = df_temp1.groupby('id')['num0'].shift(-1)

print (df_temp1)
        date id num0 num0_shifted
0  2015-10-1  A    1            2
1  2015-10-2  A    2            3
2  2015-10-3  A    3            4
3  2015-10-4  A    4          NaN
4  2015-10-1  B    1            2
5  2015-10-2  B    2            3
6  2015-10-3  B    3            4
7  2015-10-4  B    4          NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM