I have the following data frame:
import pandas as pd df = pd.DataFrame({'AAA' : ['w','x','y','z'], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]})
Which looks like this:
In [32]: df Out[32]: AAA BBB CCC 0 w 10 100 1 x 20 50 2 y 30 -30 3 z 40 -50
What I want to do is to execute a function function for each row for each column, except for those that have a non-numerical value (in this case, AAA ). In the real case, the odd case is always in the first column, and the rest (may be more than 2 columns) are always numerical.
The final desired result:
AAA BBB CCC Score 0 w 10 100 110 1 x 20 50 70 2 y 30 -30 0 3 z 40 -50 -10
I tried this but could not:
import numpy as np df["Score"] = df.apply(np.sum, axis=1)
What is the right way to do this?
Update2:
This is the code that SettingWithCopyWarning gives. Please get a fresh start to ipython for testing.
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"]])