Saya memiliki kerangka data panda:

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

Saya ingin baris dengan 's' didistribusikan 'merata' dalam kerangka data seperti di bawah ini:

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

Bagaimana menghadapinya? Terima kasih atas bantuan Anda!

0
Robin1988 19 Agustus 2017, 05:36

2 jawaban

Jawaban Terbaik

Jika urutan s tidak penting maka coba yang ini ?

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
BENY 19 Agustus 2017, 02:54

Untuk menjaga urutan baris di setiap 'kategori':

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
0
Yigal 19 Agustus 2017, 03:32