2017-10-15 113 views
1

我想从csv文件中检索一列,并使其成为数据框中的索引。但是,我意识到我可能需要事先做好一步。每天计算事务实例熊猫数据帧

csv看起来像这样;

Date,Step,Order,Price 
    2011-01-10,Step,BUY,150 
    2011-01-10,Step,SELL,150 
    2011-01-13,Step,SELL,150 
    2011-01-13,Step1,BUY,400 
    2011-01-26,Step2,BUY,100 

如果我打印数据框,这是输出:

Date Step Order Price 
0  0 Step BUY 150 
1  1 Step SELL 150 
2  2 Step SELL 150 
3  3 Step1 BUY 400 
4  4 Step2 BUY 100 

不过,我想输出是告诉每个类型的步骤我有每天有多少买/卖。

例如;

预期数据帧和输出是:

Date  Num-Buy-Sell            
2011-01-10 2 
2011-01-13 2 
2011-01-16 1 

这是我如何检索数据帧中的代码;

num_trasanctions_day = pd.read_csv(orders_file, parse_dates=True, sep=',', dayfirst=True) 
num_trasanctions_day['Transactions'] = orders.groupby(['Date', 'Order']) 
num_trasanctions_day['Date'] = num_trasanctions_day.index 

我的第一个想法是让日期成为指数,但我想我需要计算每个日期有多少卖出/买入。

错误

KeyError: 'Order' 

感谢

回答

1

只需使用value_counts

df.Date.value_counts() 
Out[27]: 
    2011-01-13 2 
    2011-01-10 2 
    2011-01-26 1 
Name: Date, dtype: int64 

编辑:如果你想分配给它回来,你正在寻找transform也请修改您的预期输出。

df['Transactions']=df.groupby('Date')['Order'].transform('count') 
df 
Out[122]: 
      Date Step Order Price Transactions 
0  2011-01-10 Step BUY 150    2 
1  2011-01-10 Step SELL 150    2 
2  2011-01-13 Step SELL 150    2 
3  2011-01-13 Step1 BUY 400    2 
4  2011-01-26 Step2 BUY 100    1 
+0

如果我做了num_trasanctions_day ['Transactions'] = num_trasanctions_day.Date.value_counts(),那么它只打印NaN。有没有办法将这些计数作为输出追加到列中? –

+0

@Codinghierarchy add'.to_frame()' – Wen

+0

仍然是NaNs num_trasanctions_day ['Transactions'] = num_trasanctions_day.Date.value_counts()。to_frame() –