2017-09-27 77 views
1

我有數據集看起來就像是:如何計算大熊貓每天的總和?

    time raccoons_bought  x y 
22443 1984-01-01 00:00:01  1 55.776462 37.593956 
2143 1984-01-01 00:00:01  4 55.757121 37.378225 
9664 1984-01-01 00:00:33  3 55.773702 37.599220 
33092 1984-01-01 00:01:39  3 55.757121 37.378225 
16697 1984-01-01 00:02:32  2 55.678549 37.583023 

我需要計算多少浣熊每 一天買了那麼我做什麼: 化妝時間指數

df = df.set_index(['time']) 

排序數據集由它

df.groupby(df.index.date).count() 

但之前我將排序我需要刪除x和y列的平均座標

如果我不刪除數據集將看起來像:

 raccoons_bought x  y 
1984-01-01 5497 5497 5497 
1984-01-02 5443 5443 5443 
1984-01-03 5488 5488 5488 
1984-01-04 5453 5453 5453 
1984-01-05 5536 5536 5536 
1984-01-06 5634 5634 5634 
1984-01-07 5468 5468 5468 

如果我刪除它,數據集將顯得精緻:

 raccoons_bought 
1984-01-01 5497 
1984-01-02 5443 
1984-01-03 5488 
1984-01-04 5453 
1984-01-05 5536 
1984-01-06 5634 
1984-01-07 5468 

所以我的問題是如何計算每raccoons_bought並保存座標不變,因爲我想在地圖上繪製這個座標並找到誰買了浣熊

+1

如果按日期組,在(X,Y)寬鬆的座標信息對每個時間。你期望的輸出是什麼? –

+0

我希望每天購買浣熊的總數和購買浣熊的公司的座標 – Anton

+0

是的,但請注意第一個表格中的前兩個條目是如何來自同一日期但具有不同座標的。在你的輸出表中,按日期排序(而不是h:m:s),你如何期望在(x,y)中表示這種差異? –

回答

2

你可以這樣做:

In [82]: df 
Out[82]: 
         time raccoons_bought   x   y 
22443 1984-01-01 00:00:01    1 55.776462 37.593956 
2143 1984-01-01 00:00:01    4 55.757121 37.378225 
9664 1984-01-01 00:00:33    3 55.773702 37.599220 
33092 1984-01-01 00:01:39    3 55.757121 37.378225 
16697 1984-01-01 00:02:32    2 55.678549 37.583023 

In [83]: df.groupby(pd.to_datetime(df.time).dt.date).agg(
    ...:  {'raccoons_bought': 'sum', 'x':'first', 'y':'first'}).reset_index() 
Out[83]: 
     time   y   x raccoons_bought 
0 1984-01-01 37.593956 55.776462    13 

In [84]: 

請注意,我用的sum作爲raccoons_bought聚合函數得到總的,如果你只是需要它的發生變化countsize

1

您可以使用:

#if necessary convert to datetime 
df['time'] = pd.to_datetime(df['time']) 
#thank you JoeCondron 
# trim the timestamps to get the datetime object, faster 
dates = df['time'].dt.floor('D') 
#if necessary python date object, slowier 
#dates = df['time'].dt.floor('D') 

#aggregate size if want count NaNs 
#aggregate count if want omit NaNs 
df1 = df.groupby(dates).size() 
print (df1) 
time 
1984-01-01 5 
dtype: int64 

#if need sums 
df11 = df.groupby(dates)['raccoons_bought'].sum().reset_index() 
print (df11) 
     time raccoons_bought 
0 1984-01-01    13 

如果不需要更改原始列需要transformsum(或sizecount):

在列表

mask = df.groupby(dates)['raccoons_bought'].transform('sum') > 4 
df2 = df.loc[mask, 'raccoons_bought'] 
print (df2) 
22443 1 
2143  4 
9664  3 
33092 3 
16697 2 
Name: raccoons_bought, dtype: int64 

如果需要獨特的價值觀:

a = df.groupby(dates)['raccoons_bought'].transform('sum') 
print (a) 
22443 13 
2143  13 
9664  13 
33092 13 
16697 13 
Name: raccoons_bought, dtype: int64 

然後根據條件篩選所​​有行

df2 = df.loc[mask, 'raccoons_bought'].unique().tolist() 
print (df2) 
[1, 4, 3, 2] 
+0

@JoeCondron - 謝謝 – jezrael