[英]How to do Groupby Count based on Date in Pandas
有一個pandas數據幀如下。 我需要計算特定日期的Orgin
和Destination
組合的總計數,並將總計數寫入一個名為total count
的新列
輸入數據
Date ORG DEST LoadMeter
6/6/2018 FR EST 4
6/6/2018 FR EST 5
6/6/2018 BE CZ 7
6/6/2018 BE CZ 8
6/6/2018 BE CZ 2
7/6/2018 BE CZ 6
7/6/2018 BE CZ 2
7/6/2018 FR EST 4
8/6/2018 FR EST 6
8/6/2018 LUX EST 2
8/6/2018 LUX EST 4
8/6/2018 FR EST 6
預期產出
Date ORG DEST LoadMeter Total Meter
6/6/2018 FR EST 4 9
6/6/2018 FR EST 5 9
6/6/2018 BE CZ 7 17
6/6/2018 BE CZ 8 17
6/6/2018 BE CZ 2 17
7/6/2018 BE CZ 6 8
7/6/2018 BE CZ 2 8
7/6/2018 FR EST 4 4
8/6/2018 FR EST 6 12
8/6/2018 LUX EST 2 6
8/6/2018 LUX EST 4 6
8/6/2018 FR EST 6 12
如何才能做到這一點。
使用transform
sum
df.groupby(['Date','ORG','DEST']).LoadMeter.transform('sum')
Out[262]:
0 9
1 9
2 17
3 17
4 17
5 8
6 8
7 4
8 12
9 6
10 6
11 12
Name: LoadMeter, dtype: int64
df['Total']=df.groupby(['Date','ORG','DEST']).LoadMeter.transform('sum')
factorize
和numpy.add.at
cols = ['Date', 'ORG', 'DEST']
i, u = pd.factorize([*zip(*map(df.get, cols))])
a = np.zeros(len(u), dtype=np.int64)
np.add.at(a, i, df.LoadMeter)
df.assign(**{'Total Meter': a[i]})
Date ORG DEST LoadMeter Total Meter
0 6/6/2018 FR EST 4 9
1 6/6/2018 FR EST 5 9
2 6/6/2018 BE CZ 7 17
3 6/6/2018 BE CZ 8 17
4 6/6/2018 BE CZ 2 17
5 7/6/2018 BE CZ 6 8
6 7/6/2018 BE CZ 2 8
7 7/6/2018 FR EST 4 4
8 8/6/2018 FR EST 6 12
9 8/6/2018 LUX EST 2 6
10 8/6/2018 LUX EST 4 6
11 8/6/2018 FR EST 6 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.