Fügen Sie eine Spalte in dataframe aus der Liste
Ich habe einen dataframe mit einigen Spalten, wie diese:
A B C
0
4
5
6
7
7
6
5
Den die mögliche Bandbreite der Werte in Einer nur von 0 bis 7.
Außerdem habe ich eine Liste von 8 Elementen wie diese:
List=[2,5,6,8,12,16,26,32] //There are only 8 elements in this list
Wenn das element in Spalte A ist n, die ich einfügen muss die n te element aus der Liste in einer neuen Spalte, sagen Sie 'D'.
Wie kann ich das in einem Rutsch, ohne Schleifen über die ganze dataframe?
Den daraus resultierenden dataframe würde wie folgt Aussehen:
A B C D
0 2
4 12
5 16
6 26
7 32
7 32
6 26
5 16
Hinweis: Der dataframe ist riesig und die iteration ist die Letzte option. Aber ich kann auch ordnen Sie die Elemente in 'Listen' in anderen Datenstruktur, wie dict, wenn nötig.
- Ich denke, man braucht eine (kleinere) Spielzeug-Beispiel, mit dem gewünschten Ergebnis. Es klingt ein wenig vage atm.
- Nie rufen wir die variable "Liste". In jeder Sprache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIUC, wenn du deine (leider den Namen)
List
in einendarray
können Sie einfach einen index in es natürlich.Hier baute ich eine neue
m
aber wenn Sie mitm = np.asarray(List)
, die gleiche Sache arbeiten sollten: die Werte indf.A
wird, wählen Sie die entsprechenden Elemente derm
.Beachten Sie, dass wenn Sie verwenden eine alte version von
numpy
haben, haben Sie möglicherweise verwendenm[df.A.values]
statt-in der Vergangenheitnumpy
nicht gut mit anderen spielen, und einige refactoring inpandas
verursachte einige Kopfschmerzen. Die Dinge haben sich verbessert.Traceback (most recent call last):
File "./b.py", line 24, in <module>
d["D"] = m[d.A]
IndexError: unsupported iterator index
numpy
bug. Tutd["D"] = m[d.A.values]
für Sie arbeiten?Weisen Sie einfach die Liste direkt:
Alternative
Konvertieren Sie die Liste in eine Reihe oder ein array und weisen:
oder
pykernel_launcher.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy """Entry point for launching an IPython kernel.
pd.Series
Effekt der "dtype"? Ich meine, wird es verlassen, schwebt als schwimmt und die strings als strings? Oder werden die Elemente in der Liste werden standardmäßig auf Streicher?Lösung Verbesserung auf der große einer von @sparrow.
Lassen df, dein dataset, und mylist die Liste mit den Werten, die Sie hinzufügen möchten, dataframe.
Nehmen wir an, Sie möchten rufen Sie Ihren neuen Spalte einfach, new_column
Zuerst die Liste in eine Reihe:
Dann verwenden Sie die einfügen - Funktion, um die Spalte hinzuzufügen. Diese Funktion hat den Vorteil, um Sie wählen zu lassen, in welcher Lage Sie möchten Platz der Spalte.
Im folgenden Beispiel werden wir die position der neuen Spalte in der ersten Stellung von Links (der Parameter loc=0)
Zuerst erstellen wir den dataframe, die Sie hatten, werde ich ignorieren Sie die Spalten B und C, da Sie nicht relevant sind.
Und die Zuordnung aus, die Sie sich wünschen:
Getan!
Ausgabe:
D
aus den Elementen derA
undList
("Wenn das element in Spalte A ein n ist, muss ich einfügen das n-te element aus der Liste in einer neuen Spalte, sagen Sie 'D'.")np.array(List)[df.A]
unddf["A"].map(dict(enumerate(List)))
ist vor allem eine Frage der Präferenz.