2017-07-26 1 views
1

Ich möchte die Jobs, Steve teilen. Spalte 01/31, so dass [SPGC-9456, 6.0]] in einer eigenen Zeile steht.Doppelten Wert in Pandas Zeile einfügen

Was nun mein Code gibt:

           2017-01-31   2017-02-01 
    Gates, Bill.        [[SPGC-14075, 0.5]]   NaN 
    Jobs, Steve.   [[SPGC-14075, 3.5], [SPGC-9456, 6.0]]   NaN 
    White, John ANDERSON. [[SPGC-14075, 1.75]]    [[SPGC-9456, 1.75]] 

Was ich will:

          2017-01-31   2017-02-01 
Gates, Bill.        [[SPGC-14075, 0.5]]   NaN 
Jobs, Steve.       [[SPGC-14075, 3.5]   NaN 
Jobs, Steve.        [SPGC-9456, 6.0]]   NaN     
White, John ANDERSON.     [[SPGC-14075, 1.75]] [[SPGC-9456, 1.75]] 
+0

Sie suchen 'unnest' ~ – Wen

Antwort

2
col = '2017-01-31' 
v = df[col].values.tolist() 
l = [len(x) for x in v] 
d = {col: [[x] for y in v for x in y]} 
df.reindex(df.index.repeat(l)).assign(**d) 

           2017-01-31   2017-02-01 
Gates, Bill.   [[SPGC-14075, 0.5]]     NaN 
Jobs, Steve.   [[SPGC-14075, 3.5]]     NaN 
Jobs, Steve.    [[SPGC-9456, 6.0]]     NaN 
White, John ANDERSON. [[SPGC-14075, 1.75]] [[SPGC-9456, 1.75]] 

Setup-

df = pd.DataFrame([ 
     [[['SPGC-14075', .5]], np.nan], 
     [[['SPGC-14075', 3.5], ['SPGC-9456', 6.]], np.nan], 
     [[['SPGC-14075', 1.75]], [['SPGC-9456', 1.75]]] 
    ], 
    'Gates, Bill.|Jobs, Steve.|White, John ANDERSON.'.split('|'), 
    ['2017-01-31', '2017-02-01'] 
) 
+0

besser als meine Lösung ~ !! + 1 – Wen

+0

Das sieht gut aus. Gibt es eine Möglichkeit, dass ich diese SPGC- # Einträge dann als Spaltenüberschriften machen könnte oder müsste ich zuerst meine Einstellungen ändern? Dies alles kam von einem Diktat namens day_dict. dh. dataframe = pd.dataframe (day_dict) – jenkelblankel

+1

@jenkelblankel Das Beste, was Sie tun könnten, ist eine andere Frage zu stellen und klar zu zeigen, was Ihr Ausgangspunkt ist, Code zur Verfügung stellen, um den Startpunkt zu erstellen, und zeigen, was Sie als sehen möchten dein Ergebnis. Es ist schwierig, Ihre Frage zu beantworten, da ich nicht genau weiß, was Sie genau meinen. Sie können das korrigieren, indem Sie sich die Zeit nehmen, eine weitere gute Frage zu stellen. Und Sie werden wahrscheinlich ein bisschen mehr rep erhalten (-: – piRSquared

1

Ich bin nicht Ihre Daten verwenden, können Sie mit meinen temporären Daten versuchen.

Temp=pd.DataFrame({'Index':['str1', 'str2', 'str3'],'va':[['x'],[['y'],['z']],['z']],'va2':[np.nan,np.nan,['YY']]}).set_index('Index') 
Temp_unnest = pd.DataFrame([[i, x] 
       for i, y in Temp['va'].apply(list).iteritems() 
        for x in y], columns=list('IV')) 
Temp_unnest['va2']=Temp_unnest.I.map(Temp.va2) 
Temp_unnest.set_index('I',inplace=True) 
Temp_unnest.columns=Temp.columns 

Temp_unnest 
Out[121]: 
     va va2 
I    
str1 x NaN 
str2 [y] NaN 
str2 [z] NaN 
str3 z [YY] 
Verwandte Themen