簡體   English   中英

根據其他列的值在 pandas dataframe 列中查找模式

[英]look for patterns in a column of pandas dataframe based on the value of other column

我有以下 dataframe: 在此處輸入圖像描述

在 key==1 的每一行中,我想在 s_w 列中搜索該行之前和之后出現的兩次 1(其中 key==1),然后將這些行的 v 值求和並將其放入新列 X 中。這些 1 的出現不一定是連續的,在 s_w 列中的 is 之間可能存在間隙,例如 11....11 或 101....10001,但是如果我們之前在 s_w 列中都找不到兩個 1或在該行之后(其中 key==1),然后我們將 NaN 放在 X 列中。 對於 key==0 的行也是 NaN。

編輯:一個新的 dataframe 來測試解決方案是否可以很好地推廣:

 df = pd.DataFrame( { "p":[1,1,1,1,1,1,1,1,1,1,1,1,1],
                 "l" :[1,1,1,1,1,1,1,1,1,1,1,1,1],
                 "w":[1,2,3,4,5,6,7,8,9,10,11,12,12],
                 "s_w":[1,1,0,0,0,0,1,0,0,0,0,1,1],
                 "key" :[1,1,0,0,0,1,0,1,0,0,0,0,1],
                 "v":[2,2,5,3,4,5,5,1,2,3,4,5,4]
               })

我認為這里有必要僅通過Series.where添加掩碼到先前的答案

g = df[df['s_w'].eq(1)].groupby(['p','l'])['v']
df['c_s'] = g.shift(-1).add(g.shift(-2)).add(g.shift(2)).add(g.shift(1)).where(df['key'].eq(1))


print (df)
    p  l   w  s_w  key  v   c_s
0   1  1   1    1    1  2   NaN
1   1  1   2    1    1  2   NaN
2   1  1   3    0    0  5   NaN
3   1  1   4    0    0  3   NaN
4   1  1   5    0    0  4   NaN
5   1  1   6    1    1  5  10.0 <- 2 + 2 + 5 + 1
6   1  1   7    1    0  5   NaN
7   1  1   8    1    1  1  19.0 <- 5 + 5 + 5 + 4
8   1  1   9    0    0  2   NaN
9   1  1  10    0    0  3   NaN
10  1  1  11    0    0  4   NaN
11  1  1  12    1    0  5   NaN
12  1  1  12    1    1  4   NaN

暫無
暫無

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

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