python - 如何根据另一列对一行中的特定列求和?
问题描述
你能帮我解决以下问题吗:
示例文件:
我尝试从每行的特定开始日期开始汇总 6 个月的总和。
总和应显示在新列中(从 startdate 算起 6 个月的总和)
我的第一个想法是使用以下代码获取它:
df['sum_6_months'] = df.loc[:,'01.2018':'06.2018'].apply(sum, axis=1)
但此代码不是单独的,仅适用于所有行中的时间范围 (01.18-06.18)。
df = pd.DataFrame(np.array([[1, 5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4,1], [1, 5, 3, 4, 5, 6, 7, 7,8,2,5,7,3,4,2],[1,5,3, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4],
[1, 5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4,3], [1, 5, 3, 4, 5, 6, 7, 7,8,2,5,7,3,4,4],[1,5,5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4],
[1, 5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4,5], [1, 5, 3, 4, 5, 6, 7, 7,8,2,5,7,3,4,5],[1,5,2, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4],
[1, 5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4,6], [1, 5, 3, 4, 5, 6, 7, 7,8,2,5,7,3,4,2],[1,5,5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4],
[1, 5, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4,4], [1, 5, 3, 4, 5, 6, 7, 7,8,2,5,7,3,4,2],[1,5,1, 3, 4, 5, 6, 7, 7, 8,2,5,7,3,4]]),
columns=['01.2018', '02.2018', '03.2018', '04.2018', '05.2018','06.2018', '07.2018', '08.2018',
'09.2018','10.2018', '11.2018', '12.2018','01.2019', '02.2019', '03.2019'])
date = [01.2018, 03.2018,04.2018,05.2018,03.2018,01.2018, 03.2018,04.2018,05.2018,03.2018,01.2018, 03.2018,04.2018,05.2018,03.2018]
df['Startdate']= date
解决方案
df['Startdate']=df['Startdate'].astype(str).str.rjust(7,'0')
df_columns = df.columns.tolist()
def get_sum_six(df_list):
start_date_index = df_columns.index(df_list[-1])
df_list = df_list[0:-1]
sum_of_six = sum(df_list[start_date_index: start_date_index + min(len(df_list)-start_date_index, 6)])
return (sum_of_six)
df['sum_last_six'] = df.apply(lambda x: get_sum_six(x.tolist()), axis=1)
推荐阅读
- html - 制作悬停时可点击的元素
- d3.js - 如何在不输入的情况下添加节点和链接做 d3-force
- r - 如何使用包 rugarch 拟合 Garch(1,1) 模型,在均值和方差方程中使用外部回归器?
- c# - 使用 c# 代码向水晶报表添加新字段(rpt)
- android-studio - Flutter项目,Android文件夹好像被排除了
- google-chrome - 如何在无头模式下使用 puppeteer 删除 SSL 证书检查/错误。?
- python - 我生成的 CSV 文件的结果包含逗号、括号
- c# - 为什么在 C# 中不允许向下转换?
- jquery - jQuery 验证器克隆的输入
- mysql - Can't use ALIAS in delete statement in MARIA DB