2017-07-14 2 views
0

Ich habe nicht viel Erfahrung mit der Arbeit mit Pandas. Ich habe einen Pandas-Datenrahmen wie unten gezeigt.Erstellen eines neuen Datenrahmens nach Gruppen basierend auf einem anderen Datenrahmen

Ich möchte einen neuen Datenrahmen erstellen, der durch die Zeilen iteriert und an den resultierenden Datenrahmen anfügt. Beispielsweise aus der Reihe 1 des Eingangsdatenrahmen - Generieren einer Folge von Zahlen [1,2,3] und die entsprechende Spalte auf Named 1

A seq 
1 1 
1 2 
1 3 
2 3 
2 4 
1 4 
1 5 
1 6 
1 7 
1 8 

Bisher habe ich es geschafft, zu erkennen, welche Funktion zu verwenden Iteriere durch die Zeilen des Pandas-Datenrahmens.

+0

Ich bin mir nicht sicher, was Sie versuchen zu tun. Können Sie Ihre Frage neu formulieren? – dustin

Antwort

2

Wenn Sie möchten, würden Schleifen verwenden.

In [1164]: data = [] 

In [1165]: for _, x in df.iterrows(): 
     ...:  data += [[x.A, y] for y in range(x.start, x.stop+1)] 
     ...: 

In [1166]: pd.DataFrame(data, columns=['A', 'seq']) 
Out[1166]: 
    A seq 
0 1 1 
1 1 2 
2 1 3 
3 2 3 
4 2 4 
5 1 4 
6 1 5 
7 1 6 
8 1 7 
9 1 8 
3

Hier ist eine Art und Weise mit gelten:

(df.set_index('A') 
    .apply(lambda x: pd.Series(np.arange(x['start'], x['stop'] + 1)), axis=1) 
    .stack() 
    .to_frame('seq') 
    .reset_index(level=1, drop=True) 
    .astype('int') 
) 
Out: 
    seq 
A  
1 1 
1 2 
1 3 
2 3 
2 4 
1 4 
1 5 
1 6 
1 7 
1 8 
0

auf die Antworten oben hinzuzufügen, hier ist eine Methode, die für die Interpretation des Datenrahmen Eingang gezeigt, in eine Form, dass das Plakat will eine Funktion definiert: es

def gen_df_permutations(perm_def_df): 
    m_list = [] 
    for i in perm_def_df.index: 
     row = perm_def_df.loc[i] 
     for n in range(row.start, row.stop+1): 
      r_list = [row.A,n] 
      m_list.append(r_list) 
    return m_list 

Rufen, die Spezifikation Datenrahmen Referenzierung :

gen_df_permutations(df) 

Oder es gegebenenfalls in einer Datenrahmen Erstellungsfunktion gewickelt ruft einen endgültigen Datenrahmen Ausgang zurückzukehren:

0.123.
pd.DataFrame(gen_df_permutations(df),columns=['A','seq']) 


    A seq 
0 1 1 
1 1 2 
2 1 3 
3 2 3 
4 2 4 
5 1 4 
6 1 5 
7 1 6 
8 1 7 
9 1 8 

N.B. In der ersten Spalte befindet sich der Dataframe-Index, der nach Bedarf entfernt/ignoriert werden kann.

Verwandte Themen