在阅读此article时,我遇到了此声明。
order_total = df.groupby('order')["ext price"].sum().rename("Order_Total").reset_index()
除了reset_index()
方法调用之外,其他所有内容对我来说都是清楚的。
我的问题是,如果不考虑给定的以下顺序,我不打电话给reset_index()
会怎样?
order_total = df.groupby('order')["ext price"].sum().rename("Order_Total").reset_index()
df_1 = df.merge(order_total)
df_1["Percent_of_Order"] = df_1["ext price"] / df_1["Order_Total"]
我试图从https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reset_index.html了解这种方法,但是不明白重置数据帧的索引是什么意思。
答案 0 :(得分:1)
一个简单的解释是:
reset_index()
获取当前索引,并将其放置在“索引”列中。然后,它为数据集重新创建一个新的“线性”索引。
df=pd.DataFrame([20,30,40,50],index=[2,3,4,5])
0
2 20
3 30
4 40
5 50
df.reset_index()
index 0
0 2 20
1 3 30
2 4 40
3 5 50
答案 1 :(得分:1)
我认为这里最好将GroupBy.transform
用于新的Series
,其大小与原始DataFrame相同,并用聚合值填充,因此merge
是不必要的:
df_1 = pd.DataFrame({
'A':list('abcdef'),
'ext price':[5,3,6,9,2,4],
'order':list('aaabbb')
})
order_total1 = df_1.groupby('order')["ext price"].transform('sum')
df_1["Percent_of_Order"] = df_1["ext price"] / order_total1
print (df_1)
A ext price order Percent_of_Order
0 a 5 a 0.357143
1 b 3 a 0.214286
2 c 6 a 0.428571
3 d 9 b 0.600000
4 e 2 b 0.133333
5 f 4 b 0.266667
我的问题是,如果不考虑顺序,不调用reset_index()会发生什么?
这里是Series
之前的reset_index()
,因此在reset_index
将Series
转换为2列DataFrame之后,第一列由索引名称调用,第二列由{{1 }}名称。
Series
原因为何在您的代码中必须将数据保留为2列DataFrame在order_total = df_1.groupby('order')["ext price"].sum().rename("Order_Total")
print (order_total)
order
a 14
b 15
Name: Order_Total, dtype: int64
print (type(order_total))
<class 'pandas.core.series.Series'>
print (order_total.name)
Order_Total
print (order_total.index.name)
order
print (order_total.reset_index())
order Order_Total
0 a 14
1 b 15
中没有参数。这意味着它通过两个DataFrame(此处为merge
列)之间的公共列名称的交集使用参数on
。
答案 2 :(得分:1)
“重置索引”将从0开始创建索引,如果有任何列设置为索引,则将其删除。
import pandas as pd
df = pd.DataFrame(
{
"ID": [1, 2, 3, 4, 5],
"name": [
"Hello Kitty",
"Hello Puppy",
"It is an Helloexample",
"for stackoverflow",
"Hello World",
],
}
)
newdf = df.set_index('ID')
print newdf.reset_index()
在reset_index()之前输出:
name
ID
1 Hello Kitty
2 Hello Puppy
3 It is an Helloexample
4 for stackoverflow
5 Hello World
reset_index()之后的输出:
ID name
0 1 Hello Kitty
1 2 Hello Puppy
2 3 It is an Helloexample
3 4 for stackoverflow
4 5 Hello World
答案 3 :(得分:0)
回答您的问题:
我的问题是,如果不考虑顺序,不调用reset_index()会发生什么?
您将具有一个多索引,该多索引由应用了group-by语句的键构成。 例如-您的情况下的“订单”。 针对该文章,两个数据框的索引差异可能会导致错误的合并(在group-by语句之后完成)。
因此,需要一个重置索引来执行正确的合并。