2016-07-29 9 views
-1

Ich habe den folgenden Code verhindern:Wie Dreifache Ausführungen in Pandas Dataframe

stim_df = pd.concat([block1,block2,bloc3,block4], axis=0, ignore_index=True).sample(frac=1).reset_index(drop=True) 
stim_df.columns = ["Word","Condition"] 

#Check for triplicates: 
for j in xrange(len(stim_df)): 
    if j == 0 or j == 1: 
     pass 
    else: 
     if stim_df["Condition"][j] == stim_df["Condition"][j-1] == stim_df["Condition"][j-2]: 
      stim_df[j-2:j+3] = stim_df[j-2:j+3].reindex([j-2,j-1,j+2,j,j+1]) 

Was ich nicht passiert sind drei benachbarte Reihen mit dem gleichen „Bedingungen“ Wert erscheinen, zusammen zu verhindern bin versucht. Wenn also meine Bedingungen "1", "2" und "3" sind, möchte ich verhindern, dass eine Reihenfolge wie 1,1,2,2,2,1,3,1 auftritt, wobei der Zustandswert 2 drei erscheint mal hintereinander.

Hier ist eine schnelle Probe eines Teils des df:

 Condition Word 
0   1 neut 
1   2 pos 
2   3 neg 
3   3 neg 
4   3 neg 
5   2 pos 
6   1 neut 
7   2 pos 
8   2 pos 
9   2 pos 
10   2 pos 

Mein Code das Problem nicht lösen. Wäre es besser, eine Pseudozufallsfunktion zu erstellen, anstatt zu versuchen, damit umzugehen, nachdem ich den Datenrahmen bereits zufällig gemischt habe? Jede Hilfe oder Vorschläge würde wirklich helfen.

+0

was wollen Sie erreichen? Wenn das ursprüngliche Dataset keine dieser Tripel hat, können Sie "Blöcke" aus diesem Set auswählen und die Blöcke so mischen, dass die "Kanten" unterschiedliche Werte haben? – maxymoo

+0

Können Sie uns auch einen kleinen Ausschnitt Ihres Dataframes zeigen? – user666

+0

@ user666 hat gerade ein Beispiel hinzugefügt – djl

Antwort

0

Möchten Sie eine Sequenz ohne Wiederholungen erstellen oder einfach die Sequenz wie 2,2,2 entfernen?

Wenn Sie nach letzterem suchen, versuchen Sie, diff zu verwenden, um sich wiederholende Sequenzen zu entfernen.

df[~(df.Condition.diff() == 0)] 

    Condition Word 
0  1  neut 
1  2  pos 
2  3  neg 
5  2  pos 
6  1  neut 
7  2  pos