избегать зацикливания в pandas кадре данных - python - PullRequest
1 голос
/ 14 июля 2020

У меня есть pandas фрейм данных в python.

Мне нужно перебрать каждый столбец и вычислить значение, и на основе этого значения я должен вычислить следующее значение строки.

Прямо сейчас я делаю это с помощью iterrows ():

value = 1000
df['calculated_column'] = 0

for index, row in df.iterrows():
    
    df.loc[index,'calculated_column'] = (df.loc[index -1 ,'calculated_column'] - df.loc[index,'column_to_sum']) if index != 0 else value 

Итак, это будет примерно так:

row 1 => df['calculated_column'] = 1000
row 2 => df['calculated_column'] = 1000 + df['column_to_sum'] = 1100
row 3 => df['calculated_column'] = 1100 + df['column_to_sum'] = 1200

Я читал, что do iterrows для итерации over a pandas dataframe следует избегать: Как перебирать строки в DataFrame в Pandas

Как я могу выполнить этот процесс без iterrows? Я пробовал сделать это с помощью функции apply, но не знаю, как ее использовать

1 Ответ

1 голос
/ 14 июля 2020

Вы можете использовать cumsum:

df = pd.DataFrame({'x': [20, 30, 50, 50, 35]})
df['y'] = 1000 + df['x'].cumsum()
print(df)

    x     y
0  20  1020
1  30  1050
2  50  1100
3  50  1150
4  35  1185
...