/ / Teil einer Numpy-Spalte extrahieren - Python, Pandas, Numpy

Extrahieren eines Teils einer Numpy-Spalte - Python, Pandas, Numpy

Ich habe ein numpy Array, das wie folgt aussieht:

>> print(x)

+-----+-----+-----+
|   0 |   1 |   2 |
|-----+-----+-----|
|   1 |   1 |   2 |
|   1 |   1 |   2 |
|   1 |   2 |   1 |
|   1 |   5 |   4 |
|   1 |   7 |   4 |
|   1 |   7 |   4 |
|   1 |   7 |   4 |
|   1 |  12 |   1 |

Ich möchte die Teile der zweiten Spalten gruppiert auf einer Spalte 1 Gruppierung extrahieren. Danach wird die gruppierte Spalte in eine eigene Zeile transponiert und in die folgende Tabelle umgewandelt:

>> print(x_transformed)

+-----+-----+-----+-----+-----+
|   0 |   1 |   2 |   3 |   4 |
|-----+-----+-----+-----+-----|
|   1 |   1 | 2   |  2  |  0  |
|   1 |   2 | 1   |  0  |  0  |
|   1 |   5 | 4   |  0  |  0  |
|   1 |   7 | 4   |  4  |  4  |
|   1 |  12 | 1   |  0  |  0  |

0 "s werden an Stellen eingefügt, an denen keine Werte vorhanden sind.

  • Zum Beispiel, wenn Sie Tabelle 1 in Spalte 1 betrachten, wo wir 7 "s haben. Die entsprechenden Werte in Spalte 2 sind 4,4,4. Daher sind in x_transformed die horizontalen Werte 4, 4, 4

Gibt es eine übliche Art, dies zu tun? Soll ich Pandas anschauen?

Antworten:

3 für die Antwort № 1

Du hast deine Frage mit "Pandas" markiert, also hier ist eine Pandas-Lösung:

In [7]: df.pivot_table(index=["0","1"], columns=df.groupby(["0","1"]).cumcount()+2, values="2", fill_value=0).reset_index()
Out[7]:
0   1  2  3  4
0  1   1  2  2  0
1  1   2  1  0  0
2  1   5  4  0  0
3  1   7  4  4  4
4  1  12  1  0  0

vorausgesetzt, Sie haben die folgenden Spalten:

In [8]: df.columns
Out[8]: Index(["0", "1", "2"], dtype="object")

3 für die Antwort № 2
>>> df["c"] = df.groupby("1").cumcount()
>>> df.set_index(["0", "1", "c"], inplace=True)
>>> df.unstack(fill_value=0).reset_index()
0   1  2
c         0  1  2
0  1   1  2  2  0
1  1   2  1  0  0
2  1   5  4  0  0
3  1   7  4  4  4
4  1  12  1  0  0