2015-09-17 3 views
1

У меня есть DataFrame так:панды - сумма объектов в колонке DataFrame и присоединиться DataFrame

d = {'buy': Series([1., 0., 1., 0., 1., 1., 0., 0., 1., 1., 1., 0., 1., 0.]), 
'id': Series([1., 2., 4., 2., 3., 4., 1., 1., 2., 1., 3., 3., 2., 3.]), 'datetime': Series(['01.02.2015', 
'01.02.2015', '01.03.2015', '03.01.2015', '06.02.2015', '01.09.2015', '18.03.2015', '02.02.2015', '03.02.2015', 
'06.04.2015', '01.04.2015', '03.04.2015', '02.04.2015', '20.03.2015'])} 

df = DataFrame(d) 
print(df) 

    buy datetime id 
0  1 01.02.2015 1 
1  0 01.02.2015 2 
2  1 01.03.2015 4 
3  0 03.01.2015 2 
4  0 06.02.2015 3 
5  1 01.09.2015 4 
6  0 18.03.2015 1 
7  0 02.02.2015 1 
8  1 03.02.2015 2 
9  1 06.04.2015 1 
10 1 01.04.2015 3 
11 0 03.04.2015 3 
12 1 02.04.2015 2 
13 0 20.03.2015 3 

Во-первых, I группа его от «ид» и получать только последнюю «DateTime» от каждого «ид» :

df1 = df.sort(columns=['datetime']).drop_duplicates(subset='id', take_last=True) 
print(df1) 

    buy datetime id 
5  1 01.09.2015 4 
8  1 03.02.2015 2 
6  0 18.03.2015 1 
13 0 20.03.2015 3 

и затем я должен суммировать каждые идентификаторы «купить» и присоединиться к новому колонку (я назвал его buy_count ') с моей DataFrame. У меня, как это л:

buys = df.groupby(by='id')['buy'].sum() 

print(buys) 

id 
1 2 
2 2 
3 1 
4 2 

Но я не могу вставить «buy_count» в DataFrame:

df1['buys_count'] = buys 
print(df1) 

    buy datetime id buys_count 
5  1 01.09.2015 4   NaN 
8  1 03.02.2015 2   NaN 
6  0 18.03.2015 1   NaN 
13 0 20.03.2015 3   NaN 

Как я предполагаю, что есть некоторые проблемы с индексами. Пытались изменить индексы, попробуйте использовать циклы, но все они не увенчались успехом. Как я могу это получить?

ответ

1

Вы можете позвонить map против столбца «ид» из df1 и передать buys для выполнения поиска:

In [270]: 
df1['buy_count'] = df1['id'].map(buys) 
df1 

Out[270]: 
    buy datetime id buy_count 
5  1 01.09.2015 4   2 
8  1 03.02.2015 2   2 
6  0 18.03.2015 1   2 
13 0 20.03.2015 3   2 

Кстати я не получаю тот же результат, что и вы для buys

+0

это мой ошибка в описании. Ваш код абсолютно прав, спасибо большое! –

Смежные вопросы