python
  • pandas
  • 2016-08-04 10 views 0 likes 
    0

    Ich habe eine sehr große Datei mit drei Spalten. Die ersten beiden sind Ganzzahlen und die dritte ist eine Zeichenfolge. Ich las es sich mit der PandasAuswahl mit zufälligen Paaren von Daten in Pandas

    mit
    data = pd.read_csv("edges+stuff.txt", sep=' ', header=None, dtype={0:np.uint32, 1:np.uint32, 2:np.str}) 
    

    Hier einige Beispiel gefälschte Daten:

    2 0 Somestuff9 
    2 0 Somestuff0 
    1 1 Somestuff5 
    0 0 Somestuff7 
    2 0 Somestuff9 
    2 0 Somestuff5 
    2 1 Somestuff2 
    1 1 Somestuff8 
    1 1 Somestuff2 
    1 0 Somestuff4 
    2 1 Somestuff3 
    0 2 Somestuff9 
    1 1 Somestuff10 
    1 0 Somestuff9 
    

    Ich mag würde folgende Stichproben durchzuführen, die ich stecke. Ich möchte eine Anzahl von zufälligen Paaren auswählen, die aus dem Datenrahmen bestehen. Ich möchte keine zufällige Zeile auswählen, da zum Beispiel "1 1" vier Mal vorkommt, aber ich hätte gerne die gleiche Chance, irgendein Paar auszuwählen, das im Datenrahmen existiert. Wenn ich "1 1" gewählt habe, möchte ich dann alle Zeilen ausgeben, die "1 1" beginnen.

    Mit meinem Beispiel gefälschte Daten möchte ich einige Paare zufällig aus [(0,0), (1,0), (1,1), (0,2), (2,0) auswählen, (2,1)] (dies sind alle Paare, die in den Daten existieren) und dann diese Paare verwenden, um Zeilen aus dem Datenrahmen auszuwählen.

    Ein Weg, dies zu tun wäre, die ersten beiden Spalten zu nehmen, sie zu sortieren und das Äquivalent von np.unique durchzuführen. Wählen Sie dann zufällige Paare aus dieser Liste und verwenden Sie sie dann, um aus dem ursprünglichen Datenrahmen auszuwählen.

    Gibt es eine Möglichkeit, dies effizient in Pandas zu tun?

    +0

    Haben Sie etwas versucht? Funktioniert es zu langsam für Sie? –

    +0

    @WayneWerner Ich bin mir nicht sicher, wie ich die beschriebenen Schritte ausführen soll. Wie erstellt man zum Beispiel eine Liste der eindeutigen Paare der ersten beiden Spalten? – eleanora

    Antwort

    2

    Hier ist eine Art und Weise:

    df.head() 
    Out: 
        col1 col2  col3 
    0  2  0 Somestuff9 
    1  2  0 Somestuff0 
    2  1  1 Somestuff5 
    3  0  0 Somestuff7 
    4  2  0 Somestuff9 
    

    Wählen Sie ein Paar zufällig:

    df[['col1', 'col2']].drop_duplicates().sample(n=1) 
    Out: 
        col1 col2 
    0  2  1 
    

    (Hier Duplikate fallen alle Zeilen Tropfen, die die gleichen col1 col2 Paare mit Ausnahme der ersten haben und .sample(n=1) Wählen Sie einen unter ihnen aus.)

    Alle Zeilen mit col1=2, col2=1:

    df[['col1', 'col2']].drop_duplicates().sample(n=1).merge(df) 
    Out: 
        col1 col2  col3 
    0  2  1 Somestuff2 
    1  2  1 Somestuff3 
    
    +1

    Sie können den Parameter der 'sample()' Methode von 1 bis 10 ('.sample (n = 10)') ändern. Es wird 10 einzigartige Paare auswählen (unter der Annahme, dass es mindestens 10 einzigartige Paare gibt). – ayhan

    +0

    Es ist wirklich eine großartige und überraschende Antwort! Pandas scheint ziemlich erstaunlich. – eleanora

    +0

    @eleanora Ja, Pandas ist großartig. :) – ayhan

    Verwandte Themen