Tôi có khung dữ liệu sau:Áp dụng chức năng hàng khôn ngoan trên khung dữ liệu gấu trúc trên các cột với các giá trị số
import pandas as pd
df = pd.DataFrame({'AAA' : ['w','x','y','z'], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
nào trông như thế này:
In [32]: df
Out[32]:
AAA BBB CCC
0 w 10 100
1 x 20 50
2 y 30 -30
3 z 40 -50
Những gì tôi muốn làm là để thực hiện hoạt động chức năng trên mỗi hàng cho mỗi cột ngoại trừ các giá trị không có giá trị số (trong trường hợp này là AAA
). Trong trường hợp thực, trường hợp không phải số là luôn luôn trên cột đầu tiên, và phần còn lại (có thể lớn hơn 2 cột) luôn luôn là số.
Kết quả mong muốn cuối cùng là:
AAA BBB CCC Score
0 w 10 100 110
1 x 20 50 70
2 y 30 -30 0
3 z 40 -50 -10
tôi đã cố gắng này, nhưng thất bại:
import numpy as np
df["Score"] = df.apply(np.sum, axis=1)
đúng cách để làm điều đó là gì?
Update2:
Đây là mã mà cho SettingWithCopyWarning
. Vui lòng khởi động ipython mới để thử nghiệm.
import pandas as pd
import numpy as np
def cvscore(fclist):
sd = np.std(fclist)
mean = np.mean(fclist)
cv = sd/mean
return cv
def calc_cvscore_on_df(df):
df["CV"] = df.iloc[:,1:].apply(cvscore, axis=1)
return df
df3 = pd.DataFrame(np.random.randn(1000, 3), columns=['a', 'b', 'c'])
calc_cvscore_on_df(df3[["a","b"]])
càu nhàu. Bạn có biết một cách tốt hơn để xử lý các trường hợp chung (nơi chúng tôi không nhất thiết phải biết những cột nào là số trước) hơn 'df.select_dtypes (include = [np.number]). Sum (axis = 1)'? – DSM
@unutbu: Làm cách nào tôi có thể khái quát hóa chức năng chung đó. Trong thực tế, nó không phải là 'np.sum' mà là hàm cụ thể khác của tôi. Xem cập nhật. – pdubois
@DSM: 'df.select_dtypes (bao gồm = [np.number]). Tổng (trục = 1)' có vẻ như một câu trả lời vượt trội. Những gì bạn không thích về nó? – unutbu