Pandas - Erstellen Sie separate Spalten in DataFrame basierend auf den Werten einer bestimmten Spalte

ronster1000

Nehmen wir an, ich habe einen einfachen Pandas DataFrame, bei dem eine Spalte einen Ländernamen enthält und eine andere Spalte einen Wert enthält. Beispielsweise:

# Import Python Libraries
import numpy as np
import pandas as pd

# Create Sample DataFrame
df = pd.DataFrame(data={'Country': ['United States','United States','United States','United States', \
                     'United States','United States','United States','United States', \
                     'United States','United States','United States','United States', \
                     'Canada','Canada','Canada','Canada','Canada','Canada','Mexico', \
                     'Mexico','Mexico','Mexico','England','England','England','England', \
                     'England','England','England','England','England','England','England', \
                     'England','England','England','France','France','France','Spain','Germany', \
                     'Germany','Germany','Germany','Germany','Germany','Germany','Germany', \
                     'Germany','Germany'], 'Value': np.random.randint(1000, size=50)})

Was erzeugt:

print(df.head())

Index     Country     Value
  0    United States   943
  1    United States   567
  2    United States   534
  3    United States   700
  4    United States   470

Meine Frage ist, was ist der einfachste Weg in Python, diesen DataFrame in einen zu konvertieren, in dem jedes Land seine eigene Spalte hat und alle Werte dieses Landes in dieser Spalte aufgeführt sind? Mit anderen Worten, wie kann ich auf einfache Weise einen DataFrame erstellen, bei dem die Anzahl der Spalten die eindeutige Anzahl der Länder in der Spalte "Land" ist und die Länge jeder Spalte davon abhängt, wie oft das entsprechende Land im ursprünglichen DataFrame vorkommt? ?

Hier ist Beispielcode, der eine Lösung bietet:

# Store Unique Country Names in Variable
columns = df['Country'].unique()

# Create Individual Country DataFrames
df_0 = df[df['Country'] == columns[0]]['Value'].values.tolist()
df_1 = df[df['Country'] == columns[1]]['Value'].values.tolist()
df_2 = df[df['Country'] == columns[2]]['Value'].values.tolist()
df_3 = df[df['Country'] == columns[3]]['Value'].values.tolist()
df_4 = df[df['Country'] == columns[4]]['Value'].values.tolist()
df_5 = df[df['Country'] == columns[5]]['Value'].values.tolist()
df_6 = df[df['Country'] == columns[6]]['Value'].values.tolist()

# Create Desired Output DataFrame
data_dict = {columns[0]: df_0, columns[1]: df_1, columns[2]: df_2, columns[3]: df_3, columns[4]: df_4, columns[5]: df_5, columns[6]: df_6}
new_df = pd.DataFrame({k:pd.Series(v[:len(df)]) for k,v in data_dict.items()})

Was erzeugt:

print(new_df)

    United States   Canada  Mexico  England France  Spain   Germany
0   838.0           135.0   496.0   568.0   71.0    588.0   811.0
1   57.0            118.0   268.0   716.0   422.0   NaN     107.0
2   953.0           396.0   850.0   860.0   707.0   NaN     318.0
3   251.0           294.0   815.0   888.0   NaN     NaN     633.0
4   127.0           466.0   NaN     869.0   NaN     NaN     910.0
5   892.0           824.0   NaN     776.0   NaN     NaN     472.0
6   11.0            NaN     NaN     508.0   NaN     NaN     466.0
7   563.0           NaN     NaN     299.0   NaN     NaN     200.0
8   864.0           NaN     NaN     568.0   NaN     NaN     637.0
9   810.0           NaN     NaN     78.0    NaN     NaN     392.0
10  268.0           NaN     NaN     106.0   NaN     NaN     NaN
11  389.0           NaN     NaN     153.0   NaN     NaN     NaN
12  NaN             NaN     NaN     217.0   NaN     NaN     NaN
13  NaN             NaN     NaN     941.0   NaN     NaN     NaN

Obwohl der obige Code funktioniert, ist er offensichtlich keine haltbare Lösung für größere Datensätze. Wie kann dieses Ergebnis am effizientesten aus dem ursprünglichen DataFrame generiert werden?

Vielen Dank!

ALollz

Wahrscheinlich nicht die performanteste Lösung da draußen, aber es wird alles top gerechtfertigt.

df1 = df.groupby('Country').Value.agg(list).apply(pd.Series).T
df1.columns.name=None

Ausgabe: df1

    Canada  England  France  Germany  Mexico  Spain  United States
0    653.0    187.0   396.0    491.0   251.0  433.0          919.0
1    215.0    301.0    25.0    107.0   755.0    NaN          435.0
2    709.0    581.0   858.0    691.0   158.0    NaN          166.0
3    626.0    706.0     NaN    572.0   767.0    NaN          352.0
4    516.0    999.0     NaN    393.0     NaN    NaN          906.0
5    847.0    688.0     NaN    780.0     NaN    NaN          489.0
6      NaN    722.0     NaN     19.0     NaN    NaN          322.0
7      NaN    728.0     NaN    166.0     NaN    NaN          753.0
8      NaN    765.0     NaN    299.0     NaN    NaN          155.0
9      NaN    956.0     NaN    449.0     NaN    NaN          438.0
10     NaN     41.0     NaN      NaN     NaN    NaN          588.0
11     NaN     43.0     NaN      NaN     NaN    NaN          796.0
12     NaN    485.0     NaN      NaN     NaN    NaN            NaN
13     NaN    218.0     NaN      NaN     NaN    NaN            NaN

Die andere Möglichkeit besteht darin, die Justify-Funktion von Coldspeed und die Pivot-Ausgabe von Yuca zu verwenden:

import numpy as np

df2 = df.pivot(index=None, columns='Country', values='Value')
df2 = pd.DataFrame(
          justify(df2.values, invalid_val=np.NaN, axis=0, side='up'), 
          columns=df2.columns
          ).dropna(0, 'all')
df2.columns.name=None

Ausgabe: df2

   Canada England France Germany Mexico Spain United States
0     653     187    396     491    251   433           919
1     215     301     25     107    755   NaN           435
2     709     581    858     691    158   NaN           166
3     626     706    NaN     572    767   NaN           352
4     516     999    NaN     393    NaN   NaN           906
5     847     688    NaN     780    NaN   NaN           489
6     NaN     722    NaN      19    NaN   NaN           322
7     NaN     728    NaN     166    NaN   NaN           753
8     NaN     765    NaN     299    NaN   NaN           155
9     NaN     956    NaN     449    NaN   NaN           438
10    NaN      41    NaN     NaN    NaN   NaN           588
11    NaN      43    NaN     NaN    NaN   NaN           796
12    NaN     485    NaN     NaN    NaN   NaN           NaN
13    NaN     218    NaN     NaN    NaN   NaN           NaN

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Erstellen Sie eine Spalte basierend auf bestimmten Werten in anderen Spalten

Erstellen einer neuen Spalte basierend auf den Werten anderer Spalten

Erstellen Sie neue Spalten mit den Zeilen einer vorhandenen Spalte basierend auf den Werten in diesen Zeilen

So erstellen Sie neue Spalten in Pandas basierend auf den Werten einer Spalte innerhalb eines Datenrahmens (Pivot oder Unpivot?)

Excel: Erstellen Sie Spalten basierend auf den Werten einer Spalte UND einer anderen Spaltenkategorie

Extrahieren Sie mehrere Spalten basierend auf den Werten einer bestimmten Spalte

So erstellen Sie neue Spalten mit Zählwerten basierend auf den Werten einer anderen Spalte SQL

Pandas: Erstellen Sie Spalten basierend auf eindeutigen Werten in Spalte

Erstellen Sie eine Verkettung von Werten in Pandas basierend auf den Werten einer anderen Spalte

So erstellen Sie die Spalte in Pandas basierend auf den Werten einer anderen Spalte

So erstellen Sie eine neue Spalte basierend auf Werten aus anderen Spalten in einem Pandas DataFrame

Erstellen Sie neue Zeilen basierend auf den Werten einer der Spalten in Pandas oder Numpy

Erstellen Sie neue Zeilen basierend auf den Werten einer der Spalten in der obigen Zeile mit einer bestimmten Bedingung - Pandas oder Numpy

Pandas: Erstellen Sie Spalten basierend auf Werten einer anderen Spalte, wenn der Zeichenfolgenwert aus der 3. Spalte stammt

Erstellen Sie Spalten basierend auf einer kategorialen Spalte und Werten aus einer anderen Spalte

Führen Sie zwei DataFrames basierend auf Spalten und Werten einer bestimmten Spalte mit Pandas in Python 3.x zusammen

Gruppieren einer Spalte basierend auf Werten in anderen Spalten, um neue Spalten in Pandas zu erstellen

Erstellen Sie eine neue Spalte im Pandas-Datenrahmen basierend auf den gefilterten Werten in der Zeile anderer Spalten

Erstellen einer neuen Spalte in einem Datenrahmen basierend auf den Werten einer anderen Spalte in Pandas

Erstellen von Spalten in einem Datenrahmen basierend auf den Werten einer Spalte in einem anderen Dataset

Erstellen neuer Spalten in einem Datensatz basierend auf den Werten einer Spalte mit Regex

Erstellen einer Funktion, die eine neue Spalte basierend auf den Werten anderer Spalten in einem Datenrahmen erstellt

Legen Sie die Werte einer Spalte im Pandas-Datenrahmen basierend auf den Werten in anderen Spalten fest

Erstellen einer neuen Spalte basierend auf Werten anderer Spalten

Wenden Sie den Zeilenhintergrund basierend auf den Werten in einer bestimmten Spalte an (WPF DataGrid).

Ändern Sie den Wert einer Spalte in R basierend auf den Werten von zwei anderen Spalten

Überprüfen Sie den Unterschied in einer Spalte basierend auf doppelten Werten in den anderen beiden Spalten

Erstellen Sie eine neue Spalte basierend auf den entsprechenden Werten zweier vorhandener Spalten

So erstellen Sie eine neue Spalte in data.table basierend auf den Werten anderer Spalten

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  3. 3

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  4. 4

    Eclipse Oxygen - Projekte verschwinden

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Wie kann ich den Kaskadenmodus global einstellen?

  7. 7

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  8. 8

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  9. 9

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  10. 10

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  11. 11

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  12. 12

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  13. 13

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  14. 14

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  15. 15

    Wie wählt man Unterschiede mit drei Tabellen aus?

  16. 16

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

  17. 17

    Wie kann ich meine Tabelle abfragen, um sie in mySQL nach 2 Feldern zu gruppieren?

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  20. 20

    Modbus Python Schneider PM5300

  21. 21

    Wie kann eine gleichmäßige Lastverteilung in ElasticSearch mit Indizes mit unterschiedlicher Anzahl von Shards erreicht werden?

heißlabel

Archiv