2016-12-24 4 views
1

У меня есть эта панд dataframe:Роллинг суммы на панде dataframe

area name colA colB 
2.7  val 3.760826923 3.502604167 
0.12 val 5.96003125 5.833534 
12.9 val 3.595288462 3.243333 
21.81 val 5.037025 4.571475667 
57.42 val 2.132785714 2.456866667 
0.03 val 3.0935 3.229389833 
2.07 val 3.336634615 3.421142 

Есть ли способ, чтобы преобразовать все числовые столбцы в кумулятивные суммы, так что в результате dataframe как это:

area name colA colB 
2.7  val 3.760826923 3.502604167 
2.82 val 9.720858173 9.336138167 
15.72 val 13.31614663 12.57947117 
37.53 val 18.35317163 17.15094683 
94.95 val 20.48595735 19.6078135 
94.98 val 23.57945735 22.83720333 
97.05 val 26.91609196 26.25834533 

ПРИМЕЧАНИЯ : Обратите внимание, что я бы предпочел не вручную указывать названия колонок

+0

'select_dtypes()' это то, что вы хотите. Проверьте мой ответ. – MYGz

ответ

3

Да. Просто используйте метод cumsum

df[['area', 'colA', 'colB]] = df[['area', 'colA', 'colB]].cumsum() 

Если вы хотите, чтобы получить все числовые this answer is good и ниже мой спин на нем.

# create list of numpy numeric types that you want 
numerics = [np.int16, np.int32, np.int64, np.float16, np.float32, np.float64] 

# make it a numpy dtype object 
numeric_dtype = [np.dtype(dt) for dt in numerics] 

# get the dtypes of every column - this is a Series 
col_types = df.dtypes 

# get just the numeric columns 
numeric_cols = col_types[col_types.isin(numeric_dtype)].index 

# do all the numeric columns 
df[numeric_cols] = df[numeric_cols].cumsum() 
+0

спасибо @Ted, есть способ, которым я могу избежать вручную указывать столбцы? – user308827

+0

Вышеуказанное должно суммировать все числовые столбцы –

1

Метод 1: Явное выбора числового dtypes

df[df.select_dtypes(include=['float64']).columns.tolist()] = \ 
            df.select_dtypes(include=['float64']).cumsum() 
df 

Метод 2: Вызов "_get_numeric_data" Способ по DF

df[df._get_numeric_data().columns.tolist()]=df._get_numeric_data().cumsum() 
df 

Выход:

enter image description here