I am looking for a solution to read previous two rows where C_1=104 and next two rows where C_1=105 includes these 2 rows as well. Below are the different dataframe inputs.
The challange I am facing is-
Cond 1 – sometimes C_1=104 is first row(refer df2) in dataframe so there wouldn’t be any previous rows.
Cond 2 – sometime C_1=104 is not there but C_1=105 is first row(refer df3).
Cond 3- sometimes Cond-1 & 2 can be other way which means C_1=105 can be last row(refer df4) OR C_1=104 can we last(C_1=105 will not be there).
<code>df1 = pd.read_csv(StringIO("""
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
<code>df1 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="s+")
</code>
df1 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="s+")
df-1 Output-
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
</code>
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
<code>df2 = pd.read_csv(StringIO("""
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
<code>df2 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="s+")
</code>
df2 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="s+")
df-2 Output-
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
</code>
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
<code>df3 = pd.read_csv(StringIO("""
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
<code>df3 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="s+")
</code>
df3 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
"18/06/2023 3:51:56" 108 112 89 0
"18/06/2023 3:51:57" 109 109 90 0
"""), sep="s+")
df-3 Output-
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
</code>
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:54" 105 134 66 2
"18/06/2023 3:51:55" 106 134 89 0
"18/06/2023 3:51:56" 107 156 77 0
<code>df4 = pd.read_csv(StringIO("""
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
<code>df4 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"""), sep="s+")
</code>
df4 = pd.read_csv(StringIO("""
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:50" 101 128 89 4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
"""), sep="s+")
df-4 Output-
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
<code> datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
</code>
datetime C_1 C_2 C_3 C_4
"18/06/2023 3:51:52" 102 128 61 4
"18/06/2023 3:51:53" 103 130 65 0
"18/06/2023 3:51:53" 104 132 89 0
"18/06/2023 3:51:54" 105 134 66 2
I was trying using df[g.cumcount().lt(N) | g.cumcount(ascending=False).lt(N)]
where N=2 and also trying using windows function but unable to find the solution.