Сумма, счет и шаблон - PullRequest
       26

Сумма, счет и шаблон

1 голос
/ 10 июля 2019

У меня есть кадр данных, как показано ниже

   ID Status  Date      Cost
0   1   F   22-Jun-17   500
1   1   M   28-Jul-17   100
2   2   M   29-Jun-17   200
3   3   M   30-Mar-17   300
4   4   F   10-Aug-17   800
5   2   F   2-Sep-17    600
6   2   F   5-Jan-18    500
7   1   F   23-Jun-18   600
8   3   F   20-Jun-18   700
9   1   M   20-Aug-08   150
10  1   F   20-Mar-19   750
11  3   M   11-Feb-19   250
12  4   M   11-Jun-18   100

Какие данные ремонта мобильного. Где F - Отказ, М - Техническое обслуживание. Я новичок в пандах. Я хотел бы узнать общую стоимость каждого идентификатора, номер F для каждого идентификатора, номер M для каждого идентификатора, первый статус этого идентификатора на основе даты. Последний статус, Общая стоимость за отказ.

Мой ожидаемый результат показан ниже

   ID Ttl_cost  No_of_F No_of_M F_cost  First_Status    Last_status
0   1   2100     3        2     1850       F                F
1   2   1300     2        1     1100       M                F
2   3   1250     1        2     700        M                M
3   4   900      1        1     800        F                M
​

1 Ответ

2 голосов
/ 10 июля 2019

Сначала преобразовать столбец в дату и время сортировать по DataFrame.sort_values, затем агрегировать по GroupBy.agg на ID столбец для sum, GroupBy.first и GroupBy.last. Выровняйте Multiindex на map и join. Затем используйте DataFrame.pivot_table для sum и size для подсчета, снова сглаживайте и используйте в последний раз concat:

df['Date'] = pd.to_datetime(df['Date'], format='%d-%b-%y')
df = df.sort_values('Date')

df2 = df.groupby('ID').agg({'Cost':['sum'], 'Status':['first','last']})
df2.columns = df2.columns.map('_'.join)

df3 = df.pivot_table(index='ID', columns='Status', values='Cost', aggfunc=['sum','size'])
df3 = df3.rename(columns={'size':'No_of', 'sum':'Cost'})
df3.columns = df3.columns.map('_'.join)
df4 = pd.concat([df2, df3], axis=1).reset_index()
print (df4)
   ID  Cost_sum Status_first Status_last  Cost_F  Cost_M  No_of_F  No_of_M
0   1      2100            M           F    1850     250        3        2
1   2      1300            M           F    1100     200        2        1
2   3      1250            M           M     700     550        1        2
3   4       900            F           M     800     100        1        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...