#python #pandas #dataframe #machine-learning #deep-learning
#python #pandas #dataframe #машинное обучение #глубокое обучение
Вопрос:
У меня есть фрейм данных pandas в Python, как показано ниже:
A -- E user
0 0 -- 0 1
1 12 -- 1 1
2 12 -- 1 1
3 13 -- 2 1
4 15 -- 3 1
5 15 -- 3 1
6 15 -- 3 1
7 19 -- 4 2
8 20 -- 5 2
9 25 -- 6 2
10 25 -- 6 2
Я хочу вычесть 1 строку из предыдущей группы / набора значений (т. Е. Она не должна быть 0) [groupby E] для каждого пользователя
Я имею в виду, чтобы иметь DataFrame, как показано ниже:
A -- E user
0 0 -- 0 1
1 12 -- 1 1
2 12 -- 1 1
3 1(ie,13-12) -- 2 1
4 2 ( -- ) -- 3 1
5 2 -- 3 1
6 2 -- 3 1
7 19 -- 4 2 (should not change at user 2)
8 1 -- 5 2
9 5(ie,25-20) -- 6 2
10 5(ie,25-20) -- 6 2
Не могли бы вы мне помочь .. Спасибо
Ответ №1:
Если в E
столбце используются уникальные группы DataFrameGroupBy.diff
, замените неправильные значения на исходные Series.fillna
и используйте Series.where
с маской для последовательных значений (сравниваются для неравных сдвинутых значений), а затем перенаправьте заполнение пропущенных значений на ffill
и, наконец, на целые числа:
df['A1'] = (df.groupby('user')['A'].diff()
.fillna(df['A'])
.where(df['E'].ne(df['E'].shift()))
.ffill()
.astype(int))
print (df)
A E user A1
0 0 0 1 0
1 12 1 1 12
2 12 1 1 12
3 13 2 1 1
4 15 3 1 2
5 15 3 1 2
6 15 3 1 2
7 19 4 2 19
8 20 5 2 1
9 25 6 2 5
10 25 6 2 5
Комментарии:
1. @TimothyAlexJohn — Какая-то проблема?
2. Я пропустил еще один столбец, который правильно объясняет мою проблему .. можете ли вы проверить мое обновление? мне очень жаль.. Я узнал об этом только тогда, когда применил его к своему dataframe.
3. Спасибо!! Я проверяю result..it занимает много времени, потому что это большой фрейм данных.. Я обновлю, когда результат будет правильным!! Спасибо за вашу большую помощь..
4. Это сработало отлично!! есть ли какой-нибудь способ дать вам сто голосов… вы так помогли.. Спасибо