gpt4 book ai didi

pandas - 如何在 Pandas 数据透视表中保留索引

转载 作者:行者123 更新时间:2023-12-04 17:55:08 25 4
gpt4 key购买 nike

假设我创建了一个 Pandas 数据透视表:

  adults_per_hh= pd.pivot_table(data,index=["hh_id"],values=["adult"],aggfunc=np.sum)
adults_per_hh.shape
(1000,1)

除了成人之外,我还想将 hh_id 保留为一列。执行此操作的最有效方法是什么?

最佳答案

我想你需要 reset_index 如果使用 pivot_table ,因为第一列是 index :

print (data)
adult hh_id
0 4 1
1 5 1
2 6 3
3 1 2
4 2 2

print (pd.pivot_table(data,index=["hh_id"],values=["adult"],aggfunc=np.sum))
adult
hh_id
1 9
2 3
3 6

adults_per_hh= pd.pivot_table(data,index=["hh_id"],values=["adult"],aggfunc=np.sum)
.reset_index()
print (adults_per_hh)
hh_id adult
0 1 9
1 2 3
2 3 6

另一种解决方案是使用 groupby 和聚合 sum :
adults_per_hh = data.groupby("hh_id")["adult"].sum().reset_index()
print (adults_per_hh)
hh_id adult
0 1 9
1 2 3
2 3 6

计时 :
#random dataframe
np.random.seed(100)
N = 10000000
data = pd.DataFrame(np.random.randint(50, size=(N,2)), columns=['hh_id','adult'])
#[10000000 rows x 2 columns]
print (data)

In [60]: %timeit (pd.pivot_table(data,index=["hh_id"],values=["adult"],aggfunc=np.sum).reset_index())
1 loop, best of 3: 384 ms per loop

In [61]: %timeit (data.groupby("hh_id", as_index=False)["adult"].sum())
1 loop, best of 3: 381 ms per loop

In [62]: %timeit (data.groupby("hh_id")["adult"].sum().reset_index())
1 loop, best of 3: 355 ms per loop

关于pandas - 如何在 Pandas 数据透视表中保留索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859591/

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