2016-03-21 25 views
0

bir pandalar veri çerçevesine fazladan bir sütun ekleyin ve sonra aşağıdaki gibi bazı sütun değerleri yeniden düzenlemek:fazladan bir sütun ekleme ve kullanma sütun değerlerini yeniden düzenleyerek pandalar

Orijinal veri çerçevesini (Tablo 1):

ID Type Order 
S171 UXT15 1 
S171 MMU18 2 
S171 SXR13 3 
S171 UTX16 4 
S172 SXR13 1 
S172 UTX16 2 
S173 UTX16 1 
S173 SXR13 2 

çok gibi, Tablo 2 yukarıdaki veri çerçevesini (Tablo 1) dönüştürme için:

ID Type Nickname Order 
S171 UXT15 R1 1 
S171 MMU18 R2 2 
S171 SXR13 R3 3 
S171 UTX16 R4 4 
S172 SXR13 R1 1 
S172 UTX16 R2 2 
S173 UTX16 R2 1 
S173 SXR13 R1 2 

Tablo 2 'Kimlik' co teklik göre fazladan bir sütun 'adı' var lumn aşağıdaki gibi

Tablo 2, daha sonra son çıkış dönüştürülür 'Sipariş' kolon:

her bir eşsiz 'Kimlik' sütunun satır ve 'Takma' dizinin düzenlenmiş eşleştirme
S171 R1R2R3R4 
S172 R1R2 
S173 R2R1 

.

Teşekkür

cevap

0

IIUC öncelikle Order ve Type sütunları birleştirerek yeni bir sütun oluşturabilirsiniz. Daha sonra ile groupby ve str'a gönderin. Son Eğer applyjoin edebilirsiniz: yorum tarafından

df['pairs'] = df['Order'].astype(str) + df['Type'] 

df['Nickname'] = 'R' + df.groupby('ID')['pairs'].rank(method='dense').astype(int).astype(str) 
print df 
    ID Type Order pairs Nickname 
0 S171 UXT15  1 1UXT15  R1 
1 S171 MMU18  2 2MMU18  R2 
2 S171 SXR13  3 3SXR13  R3 
3 S171 UTX16  4 4UTX16  R4 
4 S172 SXR13  1 1SXR13  R1 
5 S172 UTX16  2 2UTX16  R2 
6 S173 UTX16  1 1UTX16  R1 
7 S173 SXR13  2 2SXR13  R2 

print df.groupby('ID')['Nickname'].apply(''.join).reset_index() 
    ID Nickname 
0 S171 R1R2R3R4 
1 S172  R1R2 
2 S173  R1R2 

DÜZENLEME:

, bir araya toplamak, yalnızca sütun Type, son satırlar takas, ancak rank lexsorted çünkü ilk satırlar, sipariş şunlardır:

df['Nickname'] = 'R' + df.groupby('ID')['Type'].rank(method='dense').astype(int).astype(str) 
print df 
    ID Type Order Nickname 
0 S171 UXT15  1  R4 
1 S171 MMU18  2  R1 
2 S171 SXR13  3  R2 
3 S171 UTX16  4  R3 
4 S172 SXR13  1  R1 
5 S172 UTX16  2  R2 
6 S173 UTX16  1  R2 
7 S173 SXR13  2  R1 

print df.groupby('ID')['Nickname'].apply(''.join).reset_index() 
    ID Nickname 
0 S171 R4R1R2R3 
1 S172  R1R2 
2 S173  R2R1 
+0

Bu OP'nin talep ettiği çıktıyı üretmiyor. (OP'nin Nickname sütununun nasıl çalıştığını anlayamıyorum, bu yüzden herhangi bir yardım alamıyorum.) – DSM

+0

Evet, görüyorum. Son 2 satır değiştirildi. – jezrael

İlgili konular