2016-10-28 54 views
5

Tôi có một bộ dữ liệu sẽ một số dữ liệu mà trông như thế này mất tích:Pandas: Làm thế nào để điền vào các giá trị null với giá trị trung bình của một nhóm?

id category  value 
1  A   NaN 
2  B   NaN 
3  A   10.5 
4  C   NaN 
5  A   2.0 
6  B   1.0 

tôi cần phải điền vào null để sử dụng các dữ liệu trong một mô hình. Mỗi lần một danh mục xảy ra lần đầu tiên nó là NULL. Cách tôi muốn làm là đối với các trường hợp như danh mục AB có nhiều giá trị thay thế các giá trị rỗng bằng mức trung bình của danh mục đó. Và đối với loại C chỉ với một lần xuất hiện, chỉ cần điền vào mức trung bình của phần còn lại của dữ liệu.

Tôi biết rằng tôi có thể làm điều này cho các trường hợp như C để nhận mức trung bình của tất cả các hàng nhưng tôi đang cố gắng thực hiện phương tiện hạng mục cho A và B và thay thế các giá trị rỗng.

df['value'] = df['value'].fillna(df['value'].mean()) 

Tôi cần df cuối cùng để được như thế này

id category  value 
1  A   6.25 
2  B   1.0 
3  A   10.5 
4  C   4.15 
5  A   2.0 
6  B   1.0 

Trả lời

5

Tôi nghĩ rằng bạn có thể sử dụng groupbyapplyfillna với mean. Sau đó nhận được NaN nếu một số loại chỉ có NaN giá trị, vì vậy sử dụng mean của tất cả các giá trị của cột điền NaN:

df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean())) 
df.value = df.value.fillna(df.value.mean()) 
print (df) 
    id category value 
0 1  A 6.25 
1 2  B 1.00 
2 3  A 10.50 
3 4  C 4.15 
4 5  A 2.00 
5 6  B 1.00 
+0

tuyệt vời! đây là những gì tôi cần. cảm ơn ! – sfactor

+0

Tôi thích công việc của bạn, điều này thật tuyệt – Axis

Các vấn đề liên quan