gpt4 book ai didi

python - Pandas DataFrame 中的列总和

转载 作者:行者123 更新时间:2023-12-01 03:23:56 26 4
gpt4 key购买 nike

我有一个 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和pidy = y

我想对计数列求和并将数据帧 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(数百万条记录),这将花费最少的时间。

有更好的方法吗?

此外,我可以执行以下操作,而不是将 LeafID 放入 .agg() 中吗?

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

最佳答案

如果需要按LeafIdpidxpidy列进行groupby:

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

关于python - Pandas DataFrame 中的列总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41609670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com