【发布时间】:2017-05-05 07:38:15
【问题描述】:
Pandas 中groupby 中的as_index 的作用究竟是什么?
【问题讨论】:
Pandas 中groupby 中的as_index 的作用究竟是什么?
【问题讨论】:
print() 是你不懂事的朋友。多次打消疑虑。
看看:
import pandas as pd
df = pd.DataFrame(data={'books':['bk1','bk1','bk1','bk2','bk2','bk3'], 'price': [12,12,12,15,15,17]})
print(df)
print(df.groupby('books', as_index=True).sum())
print(df.groupby('books', as_index=False).sum())
输出:
books price
0 bk1 12
1 bk1 12
2 bk1 12
3 bk2 15
4 bk2 15
5 bk3 17
price
books
bk1 36
bk2 30
bk3 17
books price
0 bk1 36
1 bk2 30
2 bk3 17
当as_index=True 您在groupby() 中使用的键将成为新数据帧中的索引。
将列设置为索引的好处是:
速度。 当您根据索引列过滤值时,例如。 df.loc['bk1'],由于索引列的散列,它会更快。它不必遍历整个books 列即可找到'bk1'。它只会计算 'bk1' 的哈希值并在 1 go 中找到它。
轻松。当as_index=True 时,您可以使用这种语法df.loc['bk1'],它更短、更快,而df.loc[df.books=='bk1'] 更长、更慢。
【讨论】:
print 消除所有引起怀疑的东西。在编程的早期,print 语句被插入到程序中的任何地方来调试错误。如果您认为我已经回答了您的问题,请考虑通过单击两个三角形下方答案左侧的复选标记“✔”来接受它作为答案。
df.loc['bk1'] 也比布尔索引更快。
'bk1'。它只会计算'bk1'的哈希值并在1 go中找到它。感谢您提出这一点。
使用 group by 函数时,as_index 可以设置为 true 或 false,具体取决于您是否希望将分组所依据的列作为输出的索引。
import pandas as pd
table_r = pd.DataFrame({
'colors': ['orange', 'red', 'orange', 'red'],
'price': [1000, 2000, 3000, 4000],
'quantity': [500, 3000, 3000, 4000],
})
new_group = table_r.groupby('colors',as_index=True).count().sort('price', ascending=False)
print new_group
输出:
price quantity
colors
orange 2 2
red 2 2
现在 as_index=False
colors price quantity
0 orange 2 2
1 red 2 2
注意当我们更改 as_index=False 时颜色不再是索引
【讨论】:
设置as_index = True 的一个限制是它意味着您不能在df.pivot() 方法中使用该列。在调用枢轴之前,您必须将其重置为 False:
df_test = df[['drive-wheels', 'body-style', 'price']]
df_group = df_test.groupby(['drive-wheels', 'body-style'], as_index=False).mean() # must be False for the pivot to work
df_pivot = df_group.pivot(index='drive-wheels', columns='body-style')
【讨论】: