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

Энди

Обновлять:

Образец данных выше был слишком простым, чтобы показать мою проблему. Я надеюсь создать объект периода, который абстрагируется от конкретной даты. Моя цель — сравнить последовательность совершенных сделок каждого трейдера.

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),
    ])

person Andy    schedule 18.05.2013    source источник


Ответы (1)


Это даст вам ваш стол

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
person Jeff    schedule 18.05.2013
comment
Привет Джефф. Спасибо за вашу помощь, однако, я боюсь, что мой пример ввел в заблуждение. Недостаточно извлечь только день. Вместо этого я пытаюсь извлечь последовательность сделок. Я обновил свой исходный пост более сложным примером. - person Andy; 19.05.2013