#python #pandas #dataframe #replace #difference
#python #pandas #dataframe #заменить #разница
Вопрос:
Я пытаюсь заменить каждое значение выше 1000 в моем dataframe на его разницу с предыдущим значением строки.
Именно так я пробовал с pandas:
data_df.replace(data_df.where(data_df["value"] >= 1000), data_df["value"].diff(), inplace=True)
Это не приводит к ошибке, но ничего в dataframe не меняется. Чего мне не хватает?
Ответ №1:
import numpy as np
import pandas as pd
d = {'value': [1000, 200002,50004,600005], }
data_df = pd.DataFrame(data=d)
data_df["diff"] = data_df["value"].diff()
data_df["value"] = np.where((data_df["value"]>10000) ,data_df["diff"],data_df["value"])
data_df.drop(columns='diff', inplace=True)
Я ввожу один столбец «diff», чтобы получить разницу в предыдущей строке.
np.where
позвольте u реализовать оператор if else.
Надеюсь, это поможет вам, спасибо!
Ответ №2:
Вы можете установить значение freq
1000 или любой другой интервал, который вы хотите. У меня оно равно 10, чтобы облегчить просмотр образца. В основном смещение строки, и для каждой строки, где индекс равномерно делится на частоту, используйте сдвинутое значение, в противном случае оставьте как есть.
import pandas as pd
import numpy as np
freq = 10
df = pd.DataFrame({'data':[x for x in range(30)]})
df['previous'] = df['data'].shift(1)
df['data'] = np.where((df.index % freq==0) amp; (df.index>0), df['data'] -df['previous'], df['data'])
df.drop(columns='previous', inplace=True)
Вывод
data
0 0.0
1 1.0
2 2.0
3 3.0
4 4.0
5 5.0
6 6.0
7 7.0
8 8.0
9 9.0
10 1.0
11 11.0
12 12.0
13 13.0
14 14.0
15 15.0
16 16.0
17 17.0
18 18.0
19 19.0
20 1.0
21 21.0
22 22.0
23 23.0
24 24.0
25 25.0
26 26.0
27 27.0
28 28.0
29 29.0
Комментарии:
1. @yarvis Не стесняйтесь голосовать и принимать как правильный ответ, чтобы другие могли найти его в будущем! Спасибо
2. к сожалению, не могу проголосовать. Недостаточно репутации.
3. @yarvis нет проблем! Рад, что это помогло.