[PYTHON] So formatieren Sie eine Tabelle mit Pandas Apply, Pivot und Swaplevel

Überblick

Lassen Sie uns mit Pandas eine solche Tabelle erstellen. スクリーンショット 2016-03-16 19.35.24.png

Eingabedaten

import pandas as pd

tokyo = pd.DataFrame(data={'year':['2013','2014','2015'],
                           'cnt':[10,15,20],
                           'price':[100,100,90],},
                     columns=['year','cnt','price'])

osaka = pd.DataFrame(data={'year':['2013','2014','2015'],
                           'cnt':[5,6,7],
                           'price':[100,100,100],},
                     columns=['year','cnt','price'])

yokohama = pd.DataFrame(data={'year':['2015'],
                              'cnt':[1],
                              'price':[50],},
                        columns=['year','cnt','price'])

Ergebnis


tokyo
-----------------------
   year  cnt  price
0  2013   10    100
1  2014   15    100
2  2015   20     90

osaka
-----------------------
   year  cnt  price
0  2013    5    100
1  2014    6    100
2  2015    7    100

yokohama
-----------------------
   year  cnt  price
0  2015    1     50

In den Beispieldaten wird davon ausgegangen, dass ein bestimmtes Produkt drei Jahre lang in Tokio, Osaka und Yokohama verkauft wurde. cnt ist die Menge und der Preis ist der Stückpreis. Yokohama hat nur Daten für 2015.

Eingabedaten verketten (concat)

Geben Sie jedem DataFrame einen Städtenamen und verbinden Sie ihn vertikal.

#Fügen Sie jedem DataFrame einen Städtenamen hinzu
tokyo['city'] = 'tokyo'
osaka['city'] = 'osaka'
yokohama['city'] = 'yokohama'

#Vertikal kombinieren
df = pd.concat([tokyo,osaka,yokohama], ignore_index=True)

Ergebnis


df
-------------------------------------
   year  cnt  price      city
0  2013   10    100     tokyo
1  2014   15    100     tokyo
2  2015   20     90     tokyo
3  2013    5    100     osaka
4  2014    6    100     osaka
5  2015    7    100     osaka
6  2015    1     50  yokohama

Erstellen Sie eine neue Spalte mit den Informationen einer vorhandenen Spalte (anwenden)

Mit der Methode apply können Sie eine einheitliche Verarbeitung für alle Spalten und Zeilen durchführen. In diesem Beispiel wird Achse = 1 angegeben, sodass der Lambda-Ausdruck zeilenweise aufgerufen wird.

** Berechnen Sie den Umsatz durch Multiplikation von Menge (cnt) und Stückpreis (Preis) **

#axis=Wenden Sie in 1 die Funktion auf jede Zeile an. Achse Achse='columns'Aber der gleiche Effekt.
#x.cnt * x.Der Preisanteil ist die Nummer*Stückpreis
df["sales"] = df.apply(lambda x:x.cnt * x.price,axis=1)

Ergebnis


df
------------------------------------------------
   year  cnt  price      city  sales
0  2013   10    100     tokyo   1000
1  2014   15    100     tokyo   1500
2  2015   20     90     tokyo   1800
3  2013    5    100     osaka    500
4  2014    6    100     osaka    600
5  2015    7    100     osaka    700
6  2015    1     50  yokohama     50

** Beurteilen Sie das Kanto / Kansai-Gebiet anhand des Stadtnamens **

#'west' if x.city == 'osaka' else 'east'Ist eine ternäre Operation.
df["area"] = df.apply(lambda x:'west' if x.city == 'osaka' else 'east',axis=1)

Ergebnis


df
------------------------------------------------
   year  cnt  price      city  sales  area
0  2013   10    100     tokyo   1000  east
1  2014   15    100     tokyo   1500  east
2  2015   20     90     tokyo   1800  east
3  2013    5    100     osaka    500  west
4  2014    6    100     osaka    600  west
5  2015    7    100     osaka    700  west
6  2015    1     50  yokohama     50  east

Erstellen Sie eine Tabelle mit Städten und Jahren (pivot_table)

Listen Sie die Verkäufe für jedes Jahr in jeder Stadt auf. Pandas bearbeitet automatisch mit pivot_table, aber die Argumente sind kompliziert und gewöhnungsbedürftig. .. Dieses Mal habe ich auf [diese Seite] verwiesen (http://pbpython.com/pandas-pivot-table-explained.html).

#Erstellen Sie eine Tabelle mit cnt und Verkäufen mit Fläche und Stadt auf der horizontalen Achse und Jahr auf der vertikalen Achse.
#fill_Wert füllt den fehlenden Teil der Daten mit 0 aus.
df2 = pd.pivot_table(df,
                     index=['area','city'], 
                     columns=['year'],
                     values=['cnt','sales'],
                     fill_value=0) 

Ergebnis


df2
------------------------------------------------
               cnt           sales            
year          2013 2014 2015  2013  2014  2015
area city                                     
east tokyo      10   15   20  1000  1500  1800
     yokohama    0    0    1     0     0    50
west osaka       5    6    7   500   600   700

Das Obige ist das Ausgabeergebnis von Python, aber wenn Sie es etwas verständlicher machen, sieht es so aus.

              |  cnt           | sales             <Spalte 1. Schicht(Kein Name)
              |================|===================
year          | 2013 2014 2015 | 2013  2014  2015  <Spalte 2. Schicht(Der Name ist Jahr)
==============|================|===================
east|tokyo    |   10   15   20 | 1000  1500  1800
    |yokohama |    0    0    1 |    0     0    50
west|osaka    |    5    6    7 |  500   600   700
==============|================|===================
area|city <<Der Index hat auch zwei Ebenen. Die Namen sind Gebiet und Stadt.

Ändern Sie die Reihenfolge der Spalten in den Pivot-Ergebnissen (Swap-Ebene).

Ich bin ziemlich nah an der Ausgabe, aber ich möchte, dass die Spalten in der Reihenfolge "Jahr"> "Menge, Umsatz" liegen, also Swap-Level. Bearbeiten mit DataFrame.swaplevel.html). (Wenn Sie wissen, wie man es mit Pivot alleine macht, lassen Sie es mich bitte wissen.)

** 2 Zeilen in Spalte tauschen **

#Das erste Argument, 0, zeigt auf die 0. Spalte der Spalte.
#Das zweite Argument, 1, zeigt auf die erste Spalte der Spalte.
df2=df2.swaplevel(0,1, axis=1)

Ergebnis (Jahr ist an den Anfang verschoben)


df2
------------------------------------------------
year          2013 2014 2015  2013  2014  2015
               cnt  cnt  cnt sales sales sales
area city                                     
east tokyo      10   15   20  1000  1500  1800
     yokohama    0    0    1     0     0    50
west osaka       5    6    7   500   600   700

** Nach Jahr sortieren **

df3=df2[['2013','2014','2015']]

Ergebnis


df3
------------------------------------------------
year          2013       2014       2015      
               cnt sales  cnt sales  cnt sales
area city                                     
east tokyo      10  1000   15  1500   20  1800
     yokohama    0     0    0     0    1    50
west osaka       5   500    6   600    7   700

Ausgabe nach Excel

Nachdem Sie die gewünschte Ausgabe erstellt haben, geben Sie sie in Excel aus.

#pip install openpyxl
writer = pd.ExcelWriter('output.xlsx')
df3.to_excel(writer,'Sheet1')
writer.save()

スクリーンショット 2016-03-16 20.52.52.png

Der Rest wird durch Zeichnen von Linien und Färben erledigt. Es scheint, dass es mit openpyxl gemacht werden kann, aber diesmal habe ich es manuell mit Excel gemacht.

Recommended Posts

So formatieren Sie eine Tabelle mit Pandas Apply, Pivot und Swaplevel
[Python] So fügen Sie einer Tabelle Zeilen und Spalten hinzu (pandas DataFrame)
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle
[Pandas] So überprüfen Sie Duplikate in einer Tabelle und löschen Duplikate (entspricht dem Löschen von Duplikaten in Excel)
[Python] So geben Sie eine Pandas-Tabelle in eine Excel-Datei aus
Hinweise zum Erstellen einer LAMP-Umgebung mit Vagrant und VirtulBox
So fügen Sie eine CSV-Datei mit Pandas in eine Excel-Datei ein
So teilen und speichern Sie einen DataFrame
So zeichnen Sie ein Diagramm mit Matplotlib
So installieren Sie ein Paket mithilfe eines Repositorys
Verwendung von pandas Timestamp und date_range
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So erhalten Sie mit pandas DataFrame einen bestimmten Spaltennamen und Indexnamen
Kopieren und Einfügen des Inhalts eines Blattes im JSON-Format mit einer Google-Tabelle (mithilfe von Google Colab)
So codieren Sie eine Drohne mithilfe der Bilderkennung
Hochladen auf ein freigegebenes Laufwerk mit pydrive
So deinstallieren Sie ein mit setup.py installiertes Modul
Der erste Schritt zur Protokollanalyse (Formatieren und Einfügen von Protokolldaten in Pandas)
Lesen dynamisch generierter Tabellendefinitionen mit SQL Alchemy
So schreiben Sie eine GUI mit dem Befehl maya
Verwendung von Pandas 2
So richten Sie eine Python-Umgebung mit pyenv ein
Wie man Pferderenndaten mit pandas read_html kratzt
[GCF + Python] So laden Sie Excel in GCS hoch und erstellen eine neue Tabelle in BigQuery
Wie man ein praktisches Seminar mit Jupyter mit Docker abhält
So extrahieren Sie Nullwerte und Nicht-Nullwerte mit Pandas
So zeigen Sie DataFrame als Tabelle in Markdown an
So erstellen Sie ein Python-Paket mit VS Code
So speichern Sie eine von Python gekratzte Tabelle in CSV
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Python] So löschen Sie eine Zeile / Spalte in einer Tabelle (Liste der Optionen für die Drop-Methode)
So verwalten Sie eine README-Datei für Github und PyPI
So geben Sie ein Dokument im PDF-Format mit Sphinx aus
So verschieben Sie ein zweidimensionales Array nur mit Python [Hinweis]
So drucken Sie Zeichen als Tabelle mit der Druckfunktion von Python
Hinzufügen neuer Daten (gerade Linien und Diagramme) mit matplotlib
So generieren Sie eine Abfrage mit dem IN-Operator in Django
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
So erstellen Sie einen Datenrahmen und spielen mit Elementen mit Pandas
So rufen Sie eine Funktion auf
Wichtige Ergänzungen zu den Pandas 1.1.0 und 1.0.0
Wie man Pandas Rolling benutzt
Wie man ein Terminal hackt
[Python] So kratzen Sie eine lokale HTML-Datei und geben sie mit Beautiful Soup als CSV aus
So legen Sie eine Verknüpfung fest, um in IBus zwischen voller und halber Breite zu wechseln
Übersicht über das Erstellen eines Server-Sockets und das Einrichten eines Client-Sockets
So vergleichen Sie Listen und rufen allgemeine Elemente in einer Liste ab
Verarbeiten Sie das Ausführungsergebnis von Splunk mit Python und speichern Sie es in einer Datei
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
[Python] So erhalten und ändern Sie Zeilen / Spalten / Werte aus einer Tabelle.
Erstellen und Bereitstellen von Django-Apps (PTVS) mithilfe des Azure Table-Speichers
So installieren Sie Pandas auf EC2 (Umgang mit MemoryError und PermissionError)
Verwenden Sie sqlalchemy, um die DB-Tabelle zu durchsuchen und eine Datenflamme für Pandas zu erstellen
JOI2019 / 2020 1. Qualifikation 3. Wie man ein Problem und ein B-Problem löst
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
So speichern Sie einen Teil eines langen Videos mit OpenCV
[ROS2] Beschreibung der Neuzuordnung und der Parameter beim Start des Python-Formats
So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python
So erstellen Sie mit Faker eine CSV-Dummy-Datei mit Japanisch
So posten Sie auf einen bestimmten Kanal, ohne Slacks Incoming WebHooks zu verwenden