Я не умею делать точные сводные таблицы - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть один фрейм данных, который содержит много столбцов, и я пытаюсь сделать сводную таблицу следующим образом

Пример данных

program | InWappTable | InLeadExportTrack

VIC    |  True  | 1

VIC    | True   |1

VIC | True  |1

VIC | True  | 1

Вот мой код

rec.groupby(['InWappTable', 'InLeadExportTrack','program']).size()

И ожидаемый результат:

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

IIUC, вы можете попробовать это:

df_new=df.groupby(['program'])['InWappTable','InLeadExporttrack'].count().reset_index()
total = df_new.sum()
total['program'] = 'Total'
df_new=df_new.append(total, ignore_index=True)
print(df_new)
0 голосов
/ 03 февраля 2019

Я не верю, что вам требуется pivot_table здесь, хотя pivot_table подход с aggfunc также может быть эффективно использован.

Вот как я подошел к этому

Создайте некоторые данные

a = [['program','InWappTable','InLeadExportTrack'],
     ['VIC',True,1],
     ['Mall',False,15],
     ['VIC',True,101],
     ['VIC',True,1],
     ['Mall',True,74],
     ['Mall',True,11],
     ['VIC',False,44]]
df = pd.DataFrame(a[1:], columns=a[0])
print(df)

  program  InWappTable  InLeadExportTrack
0     VIC         True                  1
1    Mall        False                 15
2     VIC         True                101
3     VIC         True                  1
4    Mall         True                 74
5    Mall         True                 11
6     VIC        False                 44

Сначала выполните GROUP BY с count агрегацией

df_grouped = df.groupby(['program']).count()
print(df_grouped)

         InWappTable  InLeadExportTrack
program                                
Mall               3                  3
VIC                4                  4

Затем получите sum всех столбцов

num_cols = ['InWappTable','InLeadExportTrack']
df_grouped[num_cols] = df_grouped[num_cols].astype(int)
df_grouped.loc['Total']= df_grouped.sum(axis=0)
df_grouped.reset_index(drop=False, inplace=True)
print(df_grouped)

  program  InWappTable  InLeadExportTrack
0    Mall            3                  3
1     VIC            4                  4
2   Total            7                  7

РЕДАКТИРОВАТЬ

На основании комментариев в ФП df_grouped = df.groupby(['program']).count() можно заменить на df_grouped = df.groupby(['program']).sum().В этом случае вывод отображается ниже

  program  InWappTable  InLeadExportTrack
0    Mall            2                100
1     VIC            3                147
2   Total            5                247
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...