我有一个数据库,我想创建一个列,其中包含该行和给定列的下3行的总和。我已经设法使用interrows()完成了这个结果,但是,我知道这不是实现这个目标的理想方法。我尝试过以多种方式使用apply()和lambda函数,但我无法使其工作。
下面是我写的代码,它得到了想要的结果:
import pandas as pd
mpg_df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/mpg.csv')
sum_results = []
for index, row in mpg_df.iterrows():
inital_range = index
final_range = index+4 if index+4 <= mpg_df.shape[0] else mpg_df.shape[0]
sum_result = mpg_df['mpg'].iloc[inital_range:final_range].sum()
sum_results.append(sum_result)
mpg_df["special_sum"] = sum_results
mpg_df
字符串
我的问题是,我怎么能得到相同的结果,有“special_sum”列,而不使用interrows()?
编辑:就我个人而言,我并不反对interrrows(),但是,我正在努力学习Pandas和最佳实践,根据这个答案(How to iterate over rows in a DataFrame in Pandas),我不应该使用interrows(),他们对此非常明确。我不想引起争论,我只想知道是否有更好的方法来完成同样的任务。
2条答案
按热度按时间xqnpmsa81#
您可以尝试使用
.rolling()
方法中的自定义索引器:字符串
图纸:
型
bjp0bcyl2#
也许可以尝试创建一个行列表?
字符串
然后,对于每一行,计算它自己的值加上接下来的3行的和。
型