Есть ли какой-нибудь способ рассчитать еженедельные данные на python?

#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 Отредактировал мой ответ, теперь он должен работать