ฉันจะเปลี่ยนค่าของค่า DataFrame บางค่าเฉพาะในกรณีที่ตรงตามเงื่อนไขบางประการ n
จำนวนครั้งติดต่อกัน
ตัวอย่าง:
df = pd.DataFrame(np.random.randn(15, 3))
df.iloc[4:8,0]=40
df.iloc[12,0]=-40
df.iloc[10:12,1]=-40
ซึ่งให้ DF นี้แก่ฉัน:
0 1 2
0 1.238892 0.802318 -0.013856
1 -1.136326 -0.527263 -0.260975
2 1.118771 0.031517 0.527350
3 1.629482 -0.158941 -1.045209
4 40.000000 0.598657 -1.268399
5 40.000000 0.442297 -0.016363
6 40.000000 -0.316817 1.744822
7 40.000000 0.193083 0.914172
8 0.322756 -0.680682 0.888702
9 -1.204531 -0.240042 1.416020
10 -1.337494 -40.000000 -1.195780
11 -0.703669 -40.000000 0.657519
12 -40.000000 -0.288235 -0.840145
13 -1.084869 -0.298030 -1.592004
14 -0.617568 -1.046210 -0.531523
ตอนนี้ถ้าฉันทำ
a=df.copy()
a[ abs(a) > abs(a.std()) ] = float('nan')
ฉันเข้าใจ
0 1 2
0 1.238892 0.802318 -0.013856
1 -1.136326 -0.527263 -0.260975
2 1.118771 0.031517 0.527350
3 1.629482 -0.158941 NaN
4 NaN 0.598657 NaN
5 NaN 0.442297 -0.016363
6 NaN -0.316817 NaN
7 NaN 0.193083 0.914172
8 0.322756 -0.680682 0.888702
9 -1.204531 -0.240042 NaN
10 -1.337494 NaN NaN
11 -0.703669 NaN 0.657519
12 NaN -0.288235 -0.840145
13 -1.084869 -0.298030 NaN
14 -0.617568 -1.046210 -0.531523
ซึ่งเป็นเรื่องยุติธรรม อย่างไรก็ตาม ฉันต้องการแทนที่ค่าด้วย NaN
เท่านั้น หากตรงตามเงื่อนไขเหล่านี้ด้วยรายการติดต่อกันสูงสุด 2 รายการ (ดังนั้นฉันจึงสามารถแก้ไขได้ในภายหลัง) เช่น ฉันอยากให้ผลลัพธ์เป็น
0 1 2
0 1.238892 0.802318 -0.013856
1 -1.136326 -0.527263 -0.260975
2 1.118771 0.031517 0.527350
3 1.629482 -0.158941 NaN
4 40.000000 0.598657 NaN
5 40.000000 0.442297 -0.016363
6 40.000000 -0.316817 NaN
7 40.000000 0.193083 0.914172
8 0.322756 -0.680682 0.888702
9 -1.204531 -0.240042 NaN
10 -1.337494 NaN NaN
11 -0.703669 NaN 0.657519
12 NaN -0.288235 -0.840145
13 -1.084869 -0.298030 NaN
14 -0.617568 -1.046210 -0.531523
เห็นได้ชัดว่าไม่มีวิธีที่พร้อมใช้งานในการดำเนินการนี้ วิธีแก้ไขที่ฉันพบว่าใกล้เคียงที่สุดกับปัญหาของฉันคืออันนี้ แต่ฉันไม่สามารถทำให้มันได้ผลสำหรับฉัน
มีความคิดอะไรบ้าง?