#python #python-3.x #pandas #dataframe #logical-operators
Вопрос:
У меня проблема с фреймом данных. Я хотел бы получить результаты в течение начала недели за вычетом конца недели. Есть ли какой-нибудь способ сделать это?
Номер недели | Позиция | Желаемые Результаты | Операция |
---|---|---|---|
1 | 2 | ||
1 | 2 | ||
1 | 2 | 0 | 2-2 |
2 | 4 | ||
2 | 6 | ||
3 | 7 | 3 | 7-4 |
3 | 12 | ||
3 | 14 | ||
3 | 15 | 3 | 15-12 |
Комментарии:
1. есть причины для 3-й недели — 2-й недели? Я предполагаю, что вычитание должно быть в течение каждой недели
2. Извини, я виноват. Да, вы правы, должно быть 6-4 на 2 — й неделе; 15-7 на 3-й неделе
Ответ №1:
Попробуйте groupby
с transform
:
df['Desired'] = df.groupby('Week Number')['Position'].transform(lambda x: x.iloc[-1] - x.iloc[0])
А теперь:
>>> df
Week Number Position Desired
0 1 2 0
1 1 2 0
2 1 2 0
3 2 4 3
4 2 6 3
5 2 7 3
6 3 12 3
7 3 14 3
8 3 15 3
>>>
Или сначала назначьте переменной:
group = df.groupby('Week Number')['Position']
df['Desired'] = group.transform('last') - group.transform('first')
Редактировать:
Чтобы не было дубликатов, попробуйте:
df['Desired'] = df.groupby('Week Number')['Position'].transform(lambda x: [''] * (len(x) - 1) [x.iloc[-1] - x.iloc[0]])
А теперь:
>>> df
Week Number Position Desired
0 1 2
1 1 2
2 1 2 0
3 2 4
4 2 6
5 2 7 3
6 3 12
7 3 14
8 3 15 3
>>>
Комментарии:
1. Спасибо за быстрый ответ. Есть ли в любом случае способ удалить дубликаты данных в нужном?
2. @HauHarry Отредактировал мой ответ, теперь он должен работать