2012-08-08 47 views
0

隨着DataFrame,可以輸出Series使用DataFrame.apply時生成一個新的DataFrame新列大熊貓:由產生疊加DataFrames申請

  a   b   c 
0 -0.119342 0.286710 0.266750 
1 -1.514301 0.556106 -2.743888 
2 -0.156469 -0.352915 -1.963398 
3 1.165479 1.364303 0.648178 
4 1.541738 0.714239 -1.468896 

def f(x): 
    return pandas.Series([ x['a']+x['b'], x['b'] + x['c'], x['a'] + x['c'] ], index=['ab', 'bc', 'ac']) 

In [52]: df.apply(f, axis=1) 
Out[52]: 
     ab  bc  ac 
0 0.167368 0.553460 0.147408 
1 -0.958195 -2.187782 -4.258188 
2 -0.509384 -2.316313 -2.119867 
3 2.529782 2.012481 1.813658 
4 2.255977 -0.754657 0.072842 

試圖輸出新DataFrame對象,而不是Series對象導致堆放對象而不是創造一個有凝聚力DataFrame

In [53]: def f(x): 
    return pandas.DataFrame([[ x['a']+x['b'], x['b'] + x['c'], x['a'] + x['c'] ]], columns=['ab', 'bc', 'ac']) 
    ....: 

In [54]: df.apply(f, axis=1) 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Out[54]: 
0    ab  bc  ac 
0 0.167368 0.553 
1    ab  bc  ac 
0 -0.958195 -2.18 
2    ab  bc  ac 
0 -0.509384 -2.31 
3    ab  bc  ac 
0 2.529782 2.01 
4    ab  bc  ac 
0 2.255977 -0.75 

有沒有辦法輸出DataFrame s(或多個Series)可以堆疊的方式輸出單個Series對象是?

回答

1

什麼你正在嘗試做的似乎做工精細,除了在再版的警告(爲我創造了一個問題:https://github.com/pydata/pandas/issues/1749

In [57]: df 
Out[57]: 
      a   b   c 
0 -0.119342 0.286710 0.266750 
1 -1.514301 0.556106 -2.743888 
2 -0.156469 -0.352915 -1.963398 
3 1.165479 1.364303 0.648178 
4 1.541738 0.714239 -1.468896 

In [58]: s = df.apply(f, axis=1) 

In [59]: type(s) 
Out[59]: pandas.core.series.Series 

In [60]: type(s[0]) 
Out[60]: pandas.core.frame.DataFrame 

In [61]: s[0] 
Out[61]: 
     ab  bc  ac 
0 0.167368 0.55346 0.147408 

In [62]: s 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Exception ValueError: ValueError('Cannot call bool() on DataFrame.',) in 'util._checknull' ignored 
Out[62]: 
0    ab  bc  ac 
0 0.167368 0.553 
1    ab  bc  ac 
0 -0.958195 -2.18 
2    ab  bc  ac 
0 -0.509384 -2.31 
3    ab  bc  ac 
0 2.529782 2.01 
4    ab  bc  ac 
0 2.255977 -0.75