[英]Conditional search in future rows within groupby in pandas
以下是我擁有的數據框。 “目標”列是所需的輸出。
Group Item Value Target
1 0 5 0
1 1 4 0
1 0 6 0
1 0 3 1
1 1 2 0
1 0 1 1
2 1 8 0
2 0 9 0
2 0 7 1
在給定的Group
, if Item == 1
,那么我試圖找到第一行Future / next行,其中Value
小於Item == 1
的相應Value
。 例如,在第二行中,將Item == 1
和相應的Value
是4。未來的第一行,其中Value
小於4是具有第4行Value
的3。因此, Target
列指定找到一個1.如果條件滿足,則兩個Item==1
可能具有相同的將來行。 在這種情況下,我們在Target
也可以有一個1。
import pandas as pd
df = pd.DataFrame({'Group1': [1,1,1,1,1,1,2,2,2], 'Item': [0,1,0,0,1,0,1,0,0], 'Value': [5,4,6,3,2,1,8,9,7]})
df['next_Value'] = df.groupby(['Group'])['Value'].shift(-1)
創建一個帶有cumsum
的幫助鍵,然后嘗試使用transform
獲取每個組的第一個值,並將組中的每個值與第一個值進行比較,如果較小,則應返回1
df['helpkey']=df.groupby('Group').Item.cumsum()
df['New']=(df.Value<df.groupby(['Group','helpkey']).Value.transform('first')).astype(int)
df
Out[51]:
Group Item Value Target helpkey New
0 1 0 5 0 0 0
1 1 1 4 0 1 0
2 1 0 6 0 1 0
3 1 0 3 1 1 1
4 1 1 2 0 2 0
5 1 0 1 1 2 1
6 2 1 8 0 1 0
7 2 0 9 0 1 0
8 2 0 7 1 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.