在阅读这篇文章时,我看到了这样的说法。
order_total = df.groupby('order')["ext price"].sum().rename("Order_Total").reset_index()
Run Code Online (Sandbox Code Playgroud)
除了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"]
Run Code Online (Sandbox Code Playgroud)
我试图从https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reset_index.html了解此方法,但无法理解重置索引是什么意思一个数据框。
一个简单的解释是:
reset_index()获取当前索引,并将其放置在“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
Run Code Online (Sandbox Code Playgroud)
Reset Index将从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())
Run Code Online (Sandbox Code Playgroud)
之前输出reset_index():
name
ID
1 Hello Kitty
2 Hello Puppy
3 It is an Helloexample
4 for stackoverflow
5 Hello World
Run Code Online (Sandbox Code Playgroud)
之后的输出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
Run Code Online (Sandbox Code Playgroud)
我认为这里更好的是使用与由聚合值填充的原始 DataFrame 相同大小的GroupBy.transformnew ,所以没有必要:Seriesmerge
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
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我不考虑顺序调用reset_index(),会发生什么?
这是Seriesbefore reset_index(),所以 afterreset_index转换Series为 2 列 DataFrame,第一列按索引名称调用,第二列按Series名称调用。
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
Run Code Online (Sandbox Code Playgroud)
代码中为什么需要 2 列 DataFrame 中没有参数merge。这意味着它on通过两个 DataFrame 之间的公共列名称的交集来使用参数,此处为order列。
| 归档时间: |
|
| 查看次数: |
6328 次 |
| 最近记录: |