ฉันมี dataframe ในรูปแบบด้านล่าง:
Original Dataframe
| x | value1 | value2 | value3 | value4
---|-----|----------|----------|----------|-----------
0 | 1 | 1 | NaN | 3 | 1
1 | 2 | 4 | NaN | 1 | NaN
2 | 3 | 2 | 6 | 1 | 2
3 | 4 | 1 | 1 | 2 | 1
เป้าหมายของฉันคือการหาค่าเฉลี่ยสำหรับแต่ละบรรทัด โดยปล่อย NaN ออกและกำจัดค่าผิดปกติด้วย เป้าหมายคือการเข้าถึง dataframe ใหม่ด้วยรูปแบบต่อไปนี้:
Desired Dataframe
| x | mean (after dropping the NaN and the outliers)*
---|-----|--------
0 | 1 | a
1 | 2 | b
2 | 3 | c
3 | 4 | d
*โปรดทราบว่า a, b, c, d คือค่าเฉลี่ย (ฉันไม่ได้คำนวณผลลัพธ์)
เป้าหมายสูงสุดหลังจากบรรลุผลคือการพิมพ์กราฟสำหรับค่าต่างๆ เมื่อเวลาผ่านไป
เมื่อทำงานกับรายการค่าเดียว เช่น เทียบเท่ากับคอลัมน์ของค่าหนึ่งคอลัมน์และดัชนีหนึ่งคอลัมน์ ฉันสามารถดำเนินการทั้งหมดได้: ปล่อย NaN คำนวณคะแนน Z แล้วส่งคืนรายการค่าดังที่แสดง ด้านล่าง:
import pandas as pd
import numpy as np
from scipy import stats
data = {'value': [1, 2, 15, np.NaN, 2, 2, 2, 3, 1, 1],
'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
df.dropna(inplace=True)
df = df[(np.abs(stats.zscore(df['return'])) < 2)]
มีปัญหาบางประการที่เกิดขึ้นเมื่อฉันพยายามทำงานเป็นกลุ่ม (และฉันแน่ใจว่าปัญหาเหล่านี้เกิดขึ้นเพราะฉันคุ้นเคยกับการเขียนโปรแกรมโดยใช้ลูป และต้องมีวิธีที่ "ชาญฉลาด" ในการดำเนินการนี้ใน Pandas)
ฉันไม่สามารถคำนวณคะแนน Z เมื่อมีค่า NaN ฉันได้รับข้อผิดพลาดนี้:
/home/jupyterlab/conda/lib/python3.6/site-packages/ipykernel_launcher.py:14: RuntimeWarning: invalid value encountered in less
ฉันจึงรู้ว่าต้องกำจัด NaN ออก แต่ฉันไม่สามารถทำในรูปแบบดาต้าเฟรมนี้ได้เนื่องจากจะหมายถึงการลบแถวหรือคอลัมน์ส่งผลให้ข้อมูลสูญหาย
อีกวิธีหนึ่งที่ฉันพยายามแต่ไม่ประสบความสำเร็จคือเปลี่ยนตารางนี้เป็นรูปแบบยาว ซึ่งหมายความว่าฉันจะมี:
| x | valueName | actualValue
---|-----|-------------|--------------
0 | 1 | value1 | 1
1 | 1 | value2 | NaN
... ... ... ...
2 | 2 | value2 | 4
3 | 2 | value2 | NaN
นี่ทำให้ฉันทิ้ง Nan แต่การใช้คะแนน Z มันเป็นปัญหามากกว่า ฉันแน่ใจว่านี่เป็นปัญหาทั่วไป แต่ฉันไม่สามารถทราบวิธีแก้ปัญหาได้
NaN
เป็น0
ล่ะ? - person Sociopath   schedule 27.03.2019