988 Stimmen

Kombinieren Sie zwei Textspalten im Pandas-Datenrahmen

Ich habe ein 20 x 4000 DataFrame in Python mit pandas. Zwei dieser Spalten sind mit Jahr und Quartal benannt. Ich würde gerne eine Variable namens period erstellen, die aus Jahr = 2000 und Quartal = q2 2000q2 macht.

Kann mir jemand dabei helfen?

25voto

geher Punkte 475

Verallgemeinerung auf mehrere Spalten, warum nicht:

columns = ['was auch immer', 'Spalten', 'du', 'wählst']
df['Zeitraum'] = df[columns].astype(str).sum(axis=1)

19voto

Pobaranchuk Punkte 675

Sie können lambda verwenden:

combine_lambda = lambda x: '{}{}'.format(x.Year, x.quarter)

Und dann verwenden Sie es, um die neue Spalte zu erstellen:

df['period'] = df.apply(combine_lambda, axis = 1)

15voto

Samuel Nde Punkte 2162

Angenommen, Ihr Dataframe heißt df mit den Spalten Jahr und Quartal.

import pandas as pd
df = pd.DataFrame({'Quartal':'q1 q2 q3 q4'.split(), 'Jahr':'2000'})

Angenommen, wir möchten den Dataframe anzeigen;

df
>>>  Quartal    Jahr
   0    q1      2000
   1    q2      2000
   2    q3      2000
   3    q4      2000

Concateniere abschließend das Jahr und das Quartal wie folgt.

df['Periode'] = df['Jahr'] + ' ' + df['Quartal']

Sie können jetzt df print, um den resultierenden Dataframe zu sehen.

df
>>>  Quartal    Jahr    Periode
    0   q1      2000    2000 q1
    1   q2      2000    2000 q2
    2   q3      2000    2000 q3
    3   q4      2000    2000 q4

Wenn Sie den Abstand zwischen Jahr und Quartal nicht wollen, einfach entfernen Sie ihn wie folgt;

df['Periode'] = df['Jahr'] + df['Quartal']

14voto

Anton Protopopov Punkte 26936

Auch wenn die Antwort von @silvado gut ist, wenn Sie df.map(str) zu df.astype(str) ändern, wird es schneller sein:

import pandas as pd
df = pd.DataFrame({'Jahr': ['2014', '2015'], 'quartal': ['q1', 'q2']})

In [131]: %timeit df["Jahr"].map(str)
10000 Schleifen, bester Wert von 3: 132 us pro Schleife

In [132]: %timeit df["Jahr"].astype(str)
10000 Schleifen, bester Wert von 3: 82.2 us pro Schleife

13voto

Pedro M Duarte Punkte 24165

Hier ist eine Implementierung, die ich sehr vielseitig finde:

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([[0, 'das', 'schnelle', 'braune'],
   ...:                    [1, 'Fuchs', 'springt', 'über'], 
   ...:                    [2, 'der', 'faule', 'Hund']],
   ...:                   columns=['c0', 'c1', 'c2', 'c3'])

In [3]: def str_join(df, sep, *cols):
   ...:     from functools import reduce
   ...:     return reduce(lambda x, y: x.astype(str).str.cat(y.astype(str), sep=sep), 
   ...:                   [df[col] for col in cols])
   ...: 

In [4]: df['cat'] = str_join(df, '-', 'c0', 'c1', 'c2', 'c3')

In [5]: df
Out[5]: 
   c0   c1     c2     c3                cat
0   0  das  schnelle  braune  0-das-schnelle-braune
1   1  Fuchs  springt   über   1-Fuchs-springt-über
2   2  der   faule    Hund     2-der-faule-Hund

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X