簡體   English   中英

熊貓-對DataFrame列中的對象求和並與DataFrame連接

[英]pandas - sum objects in DataFrame column and join with 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

首先,我將其按“ id”分組,並僅從每個“ id”接收最新的“ 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

接下來,我需要對每個ID的“購買”求和,並將新列(我命名為buy_count')與我的DataFrame合並。 我有這樣的東西:

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

print(buys)

id
1    2
2    2
3    1
4    2

但是我無法在數據幀中插入“ buy_count”:

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

我猜索引有一些麻煩。 試圖更改索引,嘗試使用循環,但均未成功。 我怎么能得到這個?

您可以針對df1 “ id”列調用map並傳遞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相同的輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM