Tôi tổng hợp khung dữ liệu Pandas của tôi: data
. Cụ thể, tôi muốn lấy số tiền trung bình và tổng là amount
s theo số [origin
và type
]. Đối với trung bình và tổng hợp Tôi đã thử các chức năng NumPy dưới đây:Kết quả Pandas bỏ qua số
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
Vấn đề của tôi là cột amount
bao gồm NaN
s, gây ra các result
của mã ở trên để có nhiều NaN
trung bình và số tiền.
Tôi biết cả hai pd.Series.sum
và pd.Series.mean
có skipna=True
theo mặc định, vậy tại sao tôi vẫn nhận được NaN
s tại đây?
Tôi cũng đã cố gắng này, mà rõ ràng đã không làm việc:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
EDIT: Sau khi gợi ý @ Korem, tôi cũng đã cố gắng sử dụng một partial
như sau:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
nhưng gặp lỗi này:
error: 'functools.partial' object has no attribute '__name__'
Bạn có thể đăng một số dữ liệu mẫu không? Ngoài ra, để bắt đầu, thay vì 'pd.Series.sum' - chỉ cần sử dụng' 'sum'' - mã nên có đường dẫn nhanh hơn. – chrisb
Cảm ơn bạn, tôi đã quyết định sử dụng 'pd.Series.sum' jus bởi vì nó có tùy chọn' skipna'. Đọc câu trả lời của Reading @ Korem, bây giờ tôi sử dụng 'np.nansum'. Nhưng 'np.nanmean' không có sẵn trong phiên bản của tôi (1.7.1) của numpy.I sẽ cố gắng đăng dữ liệu đại diện, có thể mất một lúc. – Rhubarb