2013-03-18 263 views
0
In [1]: from datetime import datetime 

In [2]: import os 

In [3]: import pandas as pd 

In [4]: file_path = os.path.normpath('F:/EUR/data.csv') 

In [5]: parse = lambda x: datetime.strptime(x, '%d.%m.%Y %H:%M:%S') 

In [6]: df = pd.read_csv(file_path, parse_dates=[[0, 1]], date_parser=parse, ind 
ex_col=[0], header=None) 

In [7]: keys = ['Open', 'High', 'Low', 'Close'] 

In [8]: df.columns = [x for x in keys] 

In [9]: grouped = df.groupby([df.index.year, df.index.day]) 
In [10]: df[:5] 
Out[10]: 
          Open High  Low Close 
0_1 
2007-01-02 23:30:00 1.3198 1.3205 1.3197 1.3203 
2007-01-02 00:00:00 1.3203 1.3206 1.3200 1.3205 
2007-01-02 00:30:00 1.3205 1.3213 1.3205 1.3212 
2007-01-02 01:00:00 1.3212 1.3217 1.3211 1.3214 
2007-01-02 01:30:00 1.3214 1.3226 1.3213 1.3225 

1.I需要做分組對象簡單的數學,並把結果在新列,如: if df['Close']>df['Open']:
df['sum']=df['Close']-df['Open']

2.And我爲什麼不能像組:grouped = df.groupby([df.index.year, df.index.day,df['Close'>df['Open'])在大熊貓數據幀對象添加新列列數學

不要完全機械已瞭解GROUPBY

我3.How可以把導致像新列:
for (k1, k2), group in grouped:
df['new_col']=group[group['Close']>group['Open']]['Close']-group[group['Close']>group['Open']]['Open']

或者也許是更好的方法。

回答

1

您是否嘗試過這個?:

grouped = df.groupby([df.index.year,df.index.day]) 
df['sum'] = grouped.apply(lambda x: x.Open + x.Close) 
+0

該解決方案的工作。請舉例說明內聯函數。 – yuran 2013-03-19 02:29:40

+0

您可以提供我可以在我的終端中剪切/粘貼的數據。這會讓你更容易完成答案。 – Vincent 2013-03-19 12:03:02

+0

Thx Vincent尋求幫助。我提供數據作爲你的要求。 – yuran 2013-03-19 13:11:35