2017-08-19 4 views
0

ich Pandas Datenrahmen haben:Pandas-Änderung der Reihenfolge der Reihen einen Wert machen gleichmäßig verteilt

A B C 
----- 
1 3 q 
2 2 q 
3 6 q 
4 7 q 
5 8 q 
3 8 q 
1 3 s 
2 2 s 
3 8 s 

Ich möchte die Zeilen mit ‚s‘ ‚gleichmäßig‘ wie in der unten stehenden Datenrahmen verteilt sein:

A B C 
----- 
2 2 s 
1 3 q 
2 2 q 
3 6 q 
3 8 s 
4 7 q 
5 8 q 
3 8 q 
1 3 s 

Wie man damit umgehen? Danke für Ihre Hilfe!

+0

Bitte versuchen Sie es und zeigen, was Sie versucht haben. –

Antwort

0

Wenn Reihenfolge von s nicht wichtig ist, dann versuchen Sie dieses?

A=len(df1)+len(df2) 
df1.index=(list(range(0, A,4))) 
df2.index=list(set(range(0, A))-set(range(0, A,4))) 
df=pd.concat([df1,df2],axis=0).sort_index() 


df 
Out[147]: 
    A B C 
0 1 3 s 
1 1 3 q 
2 2 2 q 
3 3 6 q 
4 2 2 s 
5 4 7 q 
6 5 8 q 
7 3 8 q 
8 3 8 s 
0

Um die Reihenfolge der Zeilen in jeder ‚Kategorie‘ zu halten:

df1 = df[df.C == 'q'] 
df2 = df[df.C == 's'] 

spacing = int(len(df1)/(len(df2) - 1)) 
df2ind = range(0, (len(df2) - 1) * (spacing + 1) + 1, spacing + 1) 

df1ind = [range(i + 1, i + 1 + spacing) for i in df2ind] 
df1ind = [i for l in df1ind for i in l][:len(df1)] 

df1.index = df1ind 
df2.index = df2ind 
df = pandas.concat([df1, df2]).sort_index() 

In: df 
Out: 
    A B C 
0 1 3 s 
1 1 3 q 
2 2 2 q 
3 3 6 q 
4 2 2 s 
5 4 7 q 
6 5 8 q 
7 3 8 q 
8 3 8 s 
Verwandte Themen