2015-10-19 76 views
1

代碼1:如何使用pandas通過數據框將連接函數應用於組?

df = pd.read_csv("example.csv", parse_dates=['d']) 
df2 = df.set_index(['d', 'c']) 
df3 = df2.groupby(level=['c']) 

def function(x): 
    a = pd.rolling_mean(x, 3).rename(columns = {'b':'rm'}) 
    c = pd.rolling_std(x, 3).rename(columns = {'b':'rsd'}) 
    pd.concat([x, a, c], axis=1) 

df4 = df3.apply(lambda x: function(x)) 

代碼2:在上述兩種代碼1和代碼2的

df = pd.read_csv("example.csv", parse_dates=['d']) 
df2 = df.set_index(['d', 'c']) 
df3 = df2.groupby(level=['c']) 

def function(x): 
    x.assign(rm = lambda x: pd.rolling_mean(x, 3)) 

df4 = df3.apply(lambda x: function(x)) 

輸出df4.head的()是在IPython的正方形??我無法弄清楚爲什麼。

輸出:

enter image description here

DF3什麼樣子:

enter image description here

看起來什麼樣DF:

enter image description here

+0

你可以試試 - ''x = pd.concat([x,a,c],axis = 1)'? –

+0

是的,我確實嘗試過。同樣的錯誤! – pr338

+0

什麼錯誤?你使用'df.plot()'來得到那個方塊嗎?你能展示你的數據框的例子嗎? –

回答

2

你錯過A R E打開聲明:

In [11]: def function(x): 
      a = pd.rolling_mean(x, 3).rename(columns = {'bookings':'rm'}) 
      c = pd.rolling_std(x, 3).rename(columns = {'bookings':'rsd'}) 
      return pd.concat([x, a, c], axis=1) 

In [12]: df3.apply(lambda x: function(x)) 
Out[12]: 
        bookings   rm  rsd 
ds   city 
2013-01-01 City_2  69   NaN  NaN 
2013-01-02 City_2  101   NaN  NaN 
2013-01-03 City_2  134 101.333333 32.501282 
2013-01-04 City_2  155 130.000000 27.221315 
2013-01-05 City_2  104 131.000000 25.632011 
2013-01-06 City_2  121 126.666667 25.967929 
2013-01-07 City_2  143 122.666667 19.553346 
2013-01-08 City_2  173 145.666667 26.102363 
2013-01-09 City_2  142 152.666667 17.616280 
2013-01-10 City_2  154 156.333333 15.631165 
2013-01-11 City_2  139 145.000000 7.937254 

沒有回報function返航無,因此空數據框(這是由IPython中呈現爲一個正方形 - 這可能是一個錯誤)。

In [13]: df3.apply(lambda x: None) 
Out[13]: 
Empty DataFrame 
Columns: [] 
Index: [] 

注:在某些語言(如紅寶石,朱莉婭,斯卡拉)返回的最後一行沒有被明確而歸。在Python中,如果你錯過了返回語句,該函數返回None。

In [21]: def foo(): 
      1 

In [22]: foo() == None 
Out[22]: True 
相關問題