pandas中的reset_index()有什么用?

时间:2019-11-18 07:17:52

标签: python pandas

在阅读此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了解这种方法,但是不明白重置数据帧的索引是什么意思。

4 个答案:

答案 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_indexSeries转换为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语句之后完成)。

因此,需要一个重置索引来执行正确的合并。