熊猫:时间对象从时间抽象

时间:2013-05-18 15:47:10

标签: python pandas period

我有以下DataFrame:

df = pd.DataFrame({
'Trader': 'Carl Mark Carl Joe Mark Carl Max Max'.split(),
'Share': list('ABAABAAA'),
'Quantity': [5,2,5,10,1,5,2,1]
}, index=[
    DT.datetime(2013,1,1,13,0),
    DT.datetime(2013,1,1,13,5),
    DT.datetime(2013,1,1,20,0),
    DT.datetime(2013,1,2,10,0),
    DT.datetime(2013,1,2,12,0),                                      
    DT.datetime(2013,1,2,14,0),
    DT.datetime(2013,6,2,14,0),
    DT.datetime(2013,7,2,14,0),
    ])

是否可以每天创建一个Period对象,从具体日期开始抽象。我想评估样本中的交易者是否倾向于交易较低的交易量。

为此,我想创建一个这样的表:

Period | Trader | Quantity
--------------------------
1      | Carl   | 10
1      | Mark   | 2
1      | Joe    | 10
1      | Max    | 2
2      | Carl   | 5
2      | Mark   | 1
2      | Max    | 1

安迪

更新

上面的Datasampel太简单了,无法显示我的问题。我希望创建一个从具体日期中抽象出来的句点对象。我的目标是比较每个交易者发生的交易的顺序。

df1 = pd.DataFrame({
'Trader': 'Carl Mark Carl Joe Mark Carl Max Max'.split(),
'Share': list('ABAABAAA'),
'Quantity': [5,2,5,10,1,5,2,1]
}, index=[
    DT.datetime(2013,1,1,13,0),
    DT.datetime(2013,1,1,13,5),
    DT.datetime(2013,1,1,20,0),
    DT.datetime(2013,2,6,10,0),
    DT.datetime(2013,2,5,12,0),                                      
    DT.datetime(2013,3,7,14,0),
    DT.datetime(2013,6,4,14,0),
    DT.datetime(2013,7,4,14,0),
    ])

1 个答案:

答案 0 :(得分:0)

这会让你的桌子

In [22]: x = df.reset_index()

In [23]: x['day'] = x['index'].apply(lambda x: x.day)

In [24]: x
Out[24]: 
                index  Quantity Share Trader  day
0 2013-01-01 13:00:00         5     A   Carl    1
1 2013-01-01 13:05:00         2     B   Mark    1
2 2013-01-01 20:00:00         5     A   Carl    1
3 2013-01-02 10:00:00        10     A    Joe    2
4 2013-01-02 12:00:00         1     B   Mark    2
5 2013-01-02 14:00:00         5     A   Carl    2
6 2013-06-02 14:00:00         2     A    Max    2
7 2013-07-02 14:00:00         1     A    Max    2

但这可能是你想要的

In [25]: x.groupby(['day','Trader']).sum()
Out[25]: 
            Quantity
day Trader          
1   Carl          10
    Mark           2
2   Carl           5
    Joe           10
    Mark           1
    Max            3