簡體   English   中英

Pandas DataFrame中列的總和

[英]Sum of a column in Pandas DataFrame

我有一個Pandas DataFrame。

LeafId   pidx  pidy   count
  1       x     y       10
  1       x     y       20
  1       x     z       30
  3       b     q       10
  1       x     y       20

我們可以看到pidx = x and pidy = y有多行

我想對count列求和並獲得dataframe df2作為:

LeafId   pidx  pidy   count
  1       x     y       50
  1       x     z       30
  3       b     q       10

我知道一種方法:

df2 = df.groupby(['pidx','pidy']).agg({'LeafID':'first',count':'sum'}).reset_index()

但是我想要最有效的方式來處理龐大的DataFrame(數百萬條記錄),而這將花費最少的時間。

有什么更好的方法嗎?

另外, LeafIDLeafID放在.agg() ,我還可以執行以下操作嗎?

df2 = df.groupby(['LeafID','pidx','pidy']).agg({count':'sum'}).reset_index()

如果需要groupby通過LeafIdpidxpidy列:

df1 = df.groupby(['LeafId','pidx','pidy'], as_index=False)['count'].sum()
print (df1)
   LeafId pidx pidy  count
0       1    x    y     50
1       1    x    z     30
2       3    b    q     10

我嘗試一些時間

np.random.seed(123)
N = 1000000

L1 = list('abcdefghijklmnopqrstu')
L2 = list('efghijklmnopqrstuvwxyz')
df = pd.DataFrame({'LeafId':np.random.randint(1000, size=N),
                   'pidx': np.random.choice(L1, N),
                   'pidy': np.random.choice(L2, N),
                   'count':np.random.randint(1000, size=N)})
#print (df)

print (df.groupby(['LeafId','pidx','pidy'], as_index=False)['count'].sum())
print (df.groupby(['LeafId','pidx','pidy']).agg({'count':'sum'}).reset_index())

In [261]: %timeit (df.groupby(['LeafId','pidx','pidy'], as_index=False)['count'].sum())
1 loop, best of 3: 544 ms per loop

In [262]: %timeit (df.groupby(['LeafId','pidx','pidy']).agg({'count':'sum'}).reset_index())
1 loop, best of 3: 466 ms per loop

較小的組100010000

np.random.seed(123)
N = 1000000

L1 = list('abcdefghijklmnopqrstu')
L2 = list('efghijklmnopqrstuvwxyz')
df = pd.DataFrame({'LeafId':np.random.randint(10000, size=N),
                   'pidx': np.random.choice(L1, N),
                   'pidy': np.random.choice(L2, N),
                   'count':np.random.randint(10000, size=N)})
print (df)

print (df.groupby(['LeafId','pidx','pidy'], as_index=False)['count'].sum())
print (df.groupby(['LeafId','pidx','pidy']).agg({'count':'sum'}).reset_index())

In [264]: %timeit (df.groupby(['LeafId','pidx','pidy'], as_index=False)['count'].sum())
1 loop, best of 3: 933 ms per loop

In [265]: %timeit (df.groupby(['LeafId','pidx','pidy']).agg({'count':'sum'}).reset_index())
1 loop, best of 3: 775 ms per loop

暫無
暫無

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

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