天天看點

pandas.DataFrame.pivot_table

pandas.DataFrame.pivot_table建立一個pivot table。以DataFrame中的某一列或某幾列分别作為index和columns,構造一個新的DataFrame。

Parameter:
  • values:column to aggregate, optional
  • index:column, Grouper, array, or list of the previous
  • columns:column, Grouper, array, or list of the previous
  • aggfunc:function, list of functions, dict, default numpy.mean
  • fill_value:scalar, default None. Value to replace missing values with
  • margins:boolean, default False. Add all row / columns (e.g. for subtotal / grand totals)
  • margins_name: string, default ‘All’. Name of the row / column that will contain the totals when margins is True.

下面是一個電影評分的例子:

pandas.DataFrame.pivot_table

userId、movie和raing分别表示使用者Id、電影和評分,例如,第0行表示Id為1的使用者對電影m1評分是3,但是這樣的表格看起來比較混亂,尤其是當userId和movie亂序時,我們可以将它轉化為index為使用者Id,columns為電影的表格:

import pandas as pd
import numpy as np


data = {'userId': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
        'movie': ['m1', 'm2', 'm3', 'm4', 'm5',
                  'm1', 'm2', 'm3', 'm4', 'm5',
                  'm1', 'm2', 'm3', 'm4', 'm5'],
        'rating': [3, 4, 5, 4, 4, 2, 3, 5, 3, 4, 3, 2, 3, 4, 5]}
df = pd.DataFrame(data)
df_utility = df.pivot_table(values='rating', index='userId', columns='movie',
                            aggfunc=np.sum, margins=False)

           

df_utility:

pandas.DataFrame.pivot_table

這樣以來,使用者對電影的評分就一目了然了。上面表格中的每一行表示一位使用者對所有電影的評分,每一清單示所有使用者對一部電影的評分。

把參數margins改為True後:

import pandas as pd
import numpy as np


data = {'userId': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
        'movie': ['m1', 'm2', 'm3', 'm4', 'm5',
                  'm1', 'm2', 'm3', 'm4', 'm5',
                  'm1', 'm2', 'm3', 'm4', 'm5'],
        'rating': [3, 4, 5, 4, 4, 2, 3, 5, 3, 4, 3, 2, 3, 4, 5]}
df = pd.DataFrame(data)
df_utility = df.pivot_table(values='rating', index='userId', columns='movie',
                            aggfunc=np.sum, margins=True)

           

df_utility:

pandas.DataFrame.pivot_table
下一篇: U-Net

繼續閱讀